SpingCould使用Fegin远程调用
SpringCloud是一个完整的微服务解决方案 将许多优秀的框架以及组件集成进来 所以说它是一个集大成者
它基于SpringBoot构建 SpringCloud是离不开Springboot的
SqiangCloud技术栈
服务发现——Netflix Eureka
服务调用——Netflix Feign
配置中心——Spring Cloud Config
服务网关——Netflix Zuul
消息总线——Spring Cloud Bus
熔断器——Netflix Hystrix
负载均衡
数据监控等
本篇文章实现SpringCloud使用Fegin组件远程调用一个简单demo
1.先创建 一个Maven父工程不用添加任何依赖
2.在父工程下创建一个 eureka-server SpringInitializr项目作为子项目
这里需要开启一个Eureka-Server依赖
之后配置yml
spring:
application:
name: eureka-server
server:
port: 8080
eureka:
server:
enableSelfPreservation: true
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
在eureka-Server项目启动类使用注解开启服务
@EnableEurekaServer
之后启动项目访问 http://localhost:8080/
这里便是启动服务端 Eureka的服务注册中心
出现服务注册中心后就是要创建客户端向Eureka服务中心注册
创建第二个SpringInitializr 模块名为 eureka-client
添加客户端依赖
在eureka-client项目启动类处开启注解
@EnableEurekaClient
配置yml文件
spring:
application:
name: eureka-client
datasource:
druid:
url: jdbc:mysql://localhost:3306/kt_edu?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
username: root
password: hzy
driverClassName: com.mysql.jdbc.Driver
initialSize: 5 #初始建立连接数量
minIdle: 5 #最小连接数量
maxActive: 20 #最大连接数量
maxWait: 10000 #获取连接最大等待时间,毫秒
testOnBorrow: true #申请连接时检测连接是否有效
testOnReturn: false #归还连接时检测连接是否有效
timeBetweenEvictionRunsMillis: 60000 #配置间隔检测连接是否有效的时间(单位是毫秒)
minEvictableIdleTimeMillis: 300000 #连接在连接池的最小生存时间(毫秒)
eureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone: http://localhost:8080/eureka/
instance:
prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
ip-address: ${IP_ADDRESS:127.0.0.1}
instance-id: ${spring.application.name}:${server.port} #指定实例id
server:
port: 8090
OK后再启动 eureka-client项目
去注册中心看是否存在
这里们看到已经成功注册到了Server注册中心
红色的地方 是我没有关闭自我保护机制
配置文件加上或者修改这个配置
eureka.server.enable-self-preservation=false
下面就可以在Client子工程写我们的方法了
这里的一个查询方法就跳过了
最后一步再创建一个客户端工程
同eureka-client创建一样的工程 添加一样的依赖
加上一个依赖 使用Fegin
<!-- 使用eureka -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
配置yml
spring:
application:
name: eureka-client
datasource:
druid:
url: jdbc:mysql://121.199.47.53:3306/kt_edu?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
username: root
password: hzy
driverClassName: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 10000
testOnBorrow: true
testOnReturn: false
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8080/eureka/
instance:
prefer-ip-address: true
ip-address: ${IP_ADDRESS:127.0.0.1}
instance-id: ${spring.application.name}:${server.port}
hostname: localhost
server:
port: 8091
这里实体类就没放一个Module了
把前面的实体类扣过来
创建包 FeignClient 下创建 接口 IProductClient
package com.xiaohe.FeignClient;
import com.xiaohe.pojo.Teacher;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "EUREKA-CLIENT")
public interface IProductClient {
@GetMapping("/edu/teacher/findAll")
List<Teacher> findAll();
}
@FeignClient(name = “EUREKA-CLIENT”)
里面的就是注册到服务中心的名字
路径就是第一个客户端Controller的全访问路径
最后这边一个Controller访问这个方法调用第一个客户端的查询方法
具体就是这个结构
测试 我们就可以通过这个8091端口去访问 到 8090端口的方法
使用Feign可使得Web服务客户端的写入更加方便
以上就实现了SpringCloud强大组件Fegin的远程调用