Feign 学习
-
Feign简介
Feign是Spring Cloud的netflix下的组件之一,是一个声明式的RestFul的API客户端,同时还自带负载均衡的效果。
-
为什么要使用Feign?
- 早期的RestTemplate调用微服务时,如果请求的url后面拼接很多参数时,那么在地址后面会拼接很多&参数={},看起来代码很长同时也不利于维护。
restTemplate.getForObject("http://localhost:9096/api/report/get/info/by/id?id= {id}",String.class,map);
2. Feign能够将一些共用的API抽离出来,相当于一个接口,有利于降低代码的耦合度。
3. Feign能够与Hystrix优雅的结合,在服务调用时,如果出现错误,那么可以直接将错误进行回调处理,如将错误通过日志记录下来。
Feign的优势从这点就可以显示出来了,我们可以使用Feign来完成参数的拼接,我们不要自己去拼接很多参数。 同时Fegin使用@FeignClient()注解来完成负载均衡,通过发现eureka上注册的实例名来实现,底层还是用的ribbon。
-
怎么使用Feign?
我自己在github上写了一个小demo,搭建了一个简单的feign使用的环境:
-
注意事项
- 自己在搭建环境的时候,需要注意SpringBoot和SpringCloud的版本对应关系。
- EurekaServer和EurekaClient的版本最好统一,在这里我使用的是 starter下的eureka-server和eureka,当然也可以使用netflix下的eureka依赖。
- 在启动类上添加@EnableFeignClients()时,需要添加配置,扫描到指定包下@FeignClient()注解,否则报错。
- @FeignClient() 的name属性最好使用eureka上的注册实例名称。
-
Feign实战
在项目中,可以在Feign中配置远程地址,实现单服务测试,即哪个服务有问题,我们就使用哪个服务来连接远程上服务器上的其他服务。
我们在自定义@FeignClient接口时需要在启动的时候被扫描到:
@FeignClient(
name = "${hcf.application.accounting.name:fec-accounting}",
url = "${hcf.application.accounting.url:}",
contextId = "AccountingClient"
)
1.在启动应用时,先禁用eureka客户端,即添加启动参数:
Eureka.client.enabled=false。
2.指定激活的profiles为local
application-local.yml文件的配置如下:
在该文件里配置一下网关地址和各服务调用的地址,本地调用的话,直接使用主机ip+端口号即可:
hcf:
gateway: http://fec-api-gateway-uat.internal.aegonthtf.com
application:
auth:
url: ${hcf.gateway}/fec-auth
mdata:
url: ${hcf.gateway}/fec-mdata
base:
url: ${hcf.gateway}/fec-base
expense:
url: ${hcf.gateway}/fec-expense
payment:
url: 10.72.9.128:9088
peripheral:
url: ${hcf.gateway}/fec-peripheral
prepayment:
url: ${hcf.gateway}/fec-prepayment
workflow:
url: ${hcf.gateway}/fec-workflow
accounting:
url: ${hcf.gateway}/fec-accounting