0
点赞
收藏
分享

微信扫一扫

Feign的实现


使用 Feign 实现消费者

第一步:创建普通 Spring Boot 工程把接口放在通用的接口层、常量类、model的项目中
第二步:添加依赖 :要添加的依赖主要是 spring-cloud-starter-netflix-eureka-clientspring-cloud-starter-feign,如下:

<!-- spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

第三步:声明服务 :定义一个 GoodsRemoteClient 接口,通过**@FeignClient** 注解来指定服务名称,进而绑定服务,然后再通过 SpringMVC 中提供的注解来绑定服务提供者提供的接口, 如下:

@FeignClient("34-SPRINGCLOUD-SERVICE-GOODS") 
public interface GoodsService {
@RequestMapping("/service/goods")
public String goods();
}

这相当于绑定了一个名叫 34-SPRINGCLOUD-SERVICE-GOODS (这里 34-SPRINGCLOUD-SERVICE-GOODS大小写34-springcloud-service-goods 都可以 ) 的服务提供者提供的 /service/goods 接口;

第四步:添加注解 :在项目入口类上添加 @EnableFeignClients 注解表示开启 Spring Cloud Feign的支持功能;
第五步:使用 Controller 中调用服务 :接着来创建一个 Controller 来调用上面的服务,如下:

public class GoodsController {

@Autowired
private GoodsService goodsService;

/**
* 使用feign进行调用
*
* @return
*/
@RequestMapping("/cloud/goodsFeign")
public ResultObject goodsFeign() {
//调用远程的一个controller, restful的调用
return goodsService.goods();
}
}

第六步:属性配置 :在 application.properties 中指定服务注册中心、端口号等信息,如下:

server.port=8090

#打开所有的web访问端点
management.endpoints.web.exposure.include=*

#此实例注册到eureka服务端的name
spring.application.name=34-springcloud-service-feign

#不注册自己,我是一个消费者,别人如果不调用我的话,我就不用注册
eureka.client.register-with-eureka=false
#每间隔2s,向服务端发送一次心跳,证明自己依然"存活"
eureka.instance.lease-renewal-interval-in-seconds=2
#告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我踢出掉
eureka.instance.lease-expiration-duration-in-seconds=10
#告诉服务端,服务实例以IP作为链接,而不是取机器名
eureka.instance.prefer-ip-address=true
#告诉服务端,服务实例的唯一ID
eureka.instance.instance-id=34-springcloud-service-feign

#eureka注册中心的连接地址
#eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka
#eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka,http://eureka8762:8762/eureka,http://eureka8763:8763/eureka
eureka.client.service-url.defaultZone=http://192.168.10.128:8761/eureka,http://192.168.10.128:8762/eureka,http://192.168.10.128:8763/eureka

第七步:测试:依次启动注册中心、服务提供者和 feign 实现服务消费者,然后访问地址(调取方法)

使用Feign实现消费者的测试

负载均衡
我们知道,Spring Cloud 提供了 Ribbon 来实现负载均衡,使用 Ribbon 直接注入一个 RestTemplate 对象即可,RestTemplate 已经做好了负载均衡的配置;

在 Spring Cloud 下,使用 Feign 也是直接可以实现负载均衡的,定义一个有@FeignClient 注解的接口,然后使用@RequestMapping 注解到方法上映射远程的 REST 服务,此方法也是做好负载均衡配置的;

通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用;


举报

相关推荐

0 条评论