springcloud(5)openfeign服务调用

之前的学习中我们采用的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:

posted @ 2020-11-02 10:05  梦泽千秋  阅读(190)  评论(0编辑  收藏  举报