对应具体服务提供方的feign在服务提供方定义,其他消费依赖方引入依赖。
项目实践过程中主要注意以下问题:
一、
feign相关接口在服务方项目子模块下完成,消费方引入feign所在java包
服务方项目结构
为什么要在服务方定义对应该服务的feign接口,因为实际可能依赖该服务的相关服务众多,如在每一个消费方定义一个对应该服务的feign接口,工作量巨大,且容易出错,难以统一维护与管理,因此将对应服务的接口单独放在一个独立的统一项目模块下面开发、管理与维护。
二、消费方
消费方引入服务方所提供的feign接口对应jar包,核心关键点为以下配置
注解处的扫描非常关键,虽然ComponentScan包含路径下的feign已被spring容器加载,但所包装的并非完整的bean,需要被EnableFeignClients扫描才完整。
服务消费方application.yml配置
server:
port: 8300
spring:
application:
name: consumer-user-feign
eureka:
instance:
prefer-ip-address: true #在Eureka中显示注册服务的时候的ip地址
client:
register-with-eureka: true #默认是true,将自己注册到eureka上,这里设置eureka的高可用,所以需要将自己注册到eureka上
fetch-registry: true #是否从eureka上获取信息,由于本案例是单机,无需从别的eureka上获取注册信息,这里设置eureka的高可用,所以需要在eureka上获取服务
service-url:
defaultZone: http://localhost:8761/eureka/
#ribbon的超时时间3秒
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000
eureka:
enable: true
#开启熔断
feign:
hystrix:
enabled: true
熔断开启:feign.hystrix.enabled=true
至此,服务方feign可正常调用。