feign之间相互通信RequestInterceptor拦截器失效

1、问题描述

        前段时间碰到一个问题,有两个服务A和服务B,通过feign进行通信。因为feign之间无法直接传递请求头,只能传请求体。因此需要借助RequestInterceptor拦截器获取到请求头。服务B中设置了RequestInterceptor拦截器,但是在A进行feign调用B的时候有时候能触发B的RequestInterceptor拦截器,有时候又没有触发B的RequestInterceptor拦截器。

2、产生原因

        之所以有时能走到RequestInterceptor这里,有时走不到。这是由于我在启动类上的EnableFeignClients注解扫描的是包 @EnableFeignClients({"com.my.feign"})。 只要换成扫描具体的class就不会有这个问题了@EnableFeignClients(clients = {ProducerApiFeign.class})。       

        分析产生的原因我在FeignClientsRegistrar类里面打了断点,启动的时候看了执行步骤:

        1、启动类使用@EnableFeignClients({"com.my.feign"})

feign之间相互通信RequestInterceptor拦截器失效_第1张图片

        2、启动类使用@EnableFeignClients(clients = {ProducerApiFeign.class})

feign之间相互通信RequestInterceptor拦截器失效_第2张图片

3、解决方法

        把@EnableFeignClients({"com.my.feign"})

换成

        @EnableFeignClients(clients = {ProducerApiFeign.class})就行了。

4、参考代码

        为了复现这个问题,我简单写了一个生产者和消费者。

        feign之间相互通信RequestInterceptor拦截器失效_第3张图片

        代码:【免费】feign之间相互通信RequestInterceptor拦截器失效相关代码资源-CSDN文库

项目结构说明:

MyEureka:

        使用@EnableEurekaServer使其作为eureka服务端。

feign之间相互通信RequestInterceptor拦截器失效_第4张图片

     

MyProducer:

        生产者服务

feign之间相互通信RequestInterceptor拦截器失效_第5张图片

MyCustomer:

        消费者服务

feign之间相互通信RequestInterceptor拦截器失效_第6张图片

        

5、总结

       无

6、参考资料

@FeignClient配置 configuration 不生效_feignclient configuration不生效-CSDN博客

spring boot + feign + eureka报错Load balancer does not have available server for client的可能解决办法_springcloud eureka balancer冲突-CSDN博客

你可能感兴趣的:(工作,后端,java,maven,spring,cloud)