OpenFeign
OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等,OpenFeign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。OpenFeign的使用方式是:使用OpenFeign的注解定义接口,调用接口,就可以调用服务注册中心的服务。
-
pom依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
-
主启动类添加@EnableFeignClients注解
@SpringBootApplication @EnableEurekaClient @EnableFeignClients public class FeigndemoApplication { public static void main(String[] args) { SpringApplication.run(FeigndemoApplication.class, args); } }
-
properties配置文件
server.port=9001 spring.application.name=cloud-order-service #false表示不向注册中心注册自己 eureka.client.register-with-eureka=true #false表示自己就是注册中心 eureka.client.fetch-registry=true #设置与eureka server交互地址查询服务和注册服务都依赖这个地址 eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka eureka.instance.instance-id=order9001 eureka.instance.prefer-ip-address=true
-
使用OpenFeign的注解定义接口
消费者定义接口加上@FeignClient(value = “CLOUD-PAYMENT-SERVICE”)注解,接口内方法即为服务者的Control的方法,复制粘贴。
/** *消费者接口 **/ @Component @FeignClient(value = "CLOUD-PAYMENT-SERVICE") public interface PaymentService { @GetMapping("/sent/user/login/{username}/{password}") @LoadBalanced Result<Users> login(@PathVariable String username, @PathVariable String password); }
/** *服务者的Control类 **/ @RestController @RequestMapping("/user") public class UsersController { @Resource private UsersService usersService; @GetMapping("/login/{username}/{password}") public Result<Users> login(@PathVariable String username,@PathVariable String password){ return usersService.login(username,password); } }
-
消费者调用接口,就可以调用服务注册中心的服务
@RestController public class OrderController { @Resource private PaymentService paymentService; @GetMapping("/consumer/login/{admin}/{password}") public Result<Users> orderLogin(@PathVariable String admin, @PathVariable String password){ return paymentService.login(admin, password); } }
-
OpenFeign 客户端默认等待1秒钟,但是如果服务端业务超过1秒,则会报错。为了避免这样的情况,我们需要设置feign客户端的超时控制。
#设置feign客户端建立连接时间 feign.client.config.default.connect-timeout=5000 #设置feign客户端建立连接后,读取到资源的时间 feign.client.config.default.read-timeout=5000
-
Feign日志级别
NONE:默认级别,不显示日志
BASIC:仅记录请求方法、URL、响应状态及执行时间
HEADERS:除了BASIC中定义的信息之外,还有请求和响应头信息
FULL:除了HEADERS中定义的信息之外,还有请求和响应正文及元数据信息定义OpenFeignConfig配置类,设置日志级别为 FULL。
@Configuration public class OpenFeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } }
设置feign以什么级别监控那个接口
#feign以什么级别监控那个接口 logging.level.com.example.feigndemo.service.PaymentService=debug