之前的学习中我们采用的ribbon负载均衡模式是搭配着restTemplate来使用,而使用openfeign来管理服务的调用的话,则变成了面向接口的方式,比较符合我们面向服务的思想。
(1)消费者接口。
首先openfeign是面向消费者的接口,消费者通过独立的接口写入服务提供者的接口,然后进行调用即和我们熟悉的调用对象一样了。
新建消费者接口,value的值是服务提供者在eureka注册的名字。
@Component @FeignClient(value = "CLOUD-PAYMENT-SERVICE") public interface PaymentFeignService { @GetMapping("/payment/get/{id}") public CommonResult<PayMent> getPaymentById(@PathVariable("id") Long id); }
(2)controller调用
@RestController @Slf4j public class OrderFeignController { @Resource private PaymentFeignService paymentFeignService; @GetMapping(value = "/consumer/payment/get/{id}") public CommonResult<PayMent> getPaymentId(@PathVariable("id") long id){ return paymentFeignService.getPaymentById(id); } }
可以发现以前是采用restTemplate调用方法来返回参数。现在改成了接口自然的调用方法来实现。
(3)启动类注解和pom文件
@EnableFeignClients
启动类需要加上这个注解。
<!-- openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
(4)超时管理
一般消费者在调用服务提供者的服务时候只会等待短暂的几秒,如果一定时间内得不到响应就会直接返回报错,所以可以适当的进行超时控制,延迟一定响应时间。
只需要在yml文件中配置一下
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的实际
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
(5)日志增强
为了得到更加详细的日志情况,可以配置上日志增强
yml文件配置
logging:
level:
#feign日志以什么级别监控那个接口
com.bai.service.PaymentFeignService: debug
创建一个配置类
@Configuration public class FeignConfig { @Bean Logger.Level feignloggerlevel(){ return Logger.Level.FULL; } }
本篇所有代码均在GitHub: