解决Spring Cloud Feign 请求时附带请求头的问题

网友投稿 1541 2022-11-17


解决Spring Cloud Feign 请求时附带请求头的问题

问题描述

Feign 在请求时是不会将 request 的请求头带着请求的,导致假如 Feign 调用的接口需要请求头的信息,比如当前用户的 token 之类的就获取不到

解决方案 FeignConfiguration

通过实现 Feign 的 RequestInterceptor 将从上下文中获取到的请求头信息循环设置到 Feign 请求头中。

/**

* feign 配置文件

* 将请求头中的参数,全部作为 feign 请求头参数传递

* @author: linjinp

* @create: 2020-06-28 09:54

**/

@Configuration

public class FeignConfiguration implements RequestInterceptor {

@Ovehttp://rride

public void apply(RequestTemplate requestTemplate) {

HttpServletRequest request = SpringContextUtils.getHttpServletRequest();

Enumeration headerNames = request.getHeaderNames();

if (headerNames != null) {

while (headerNames.hasMoreElements()) {

String name = headerNames.nextElement();

String values = request.getHeader(name);

requestTemplate.header(name, values);

}

}

}

}

使用

通过 configuration = FeignConfiguration.class 指定这次 Feign 请求走哪种配置

@FeignClient(name = "admin", contextId = "factoryPlmseriesRelation", configuration = FeignConfiguration.class)

//@FeignClient(name = "admin2", contextId = "factoryPlmseriesRelation", url = "http://127.0.0.1:8582/", configuration = FeignConfiguration.class)

public interface FeignFactoryPlmseriesRelationService {

/**

* 根据当前用户,获取工厂与PLM关联关系

* @return

*/

@GetMapping(value = "/factoryPlmseriesRelation/getFactoryPlmseriesRelation")

ErrorMsg> getFactoryPlmseriesRelation();

}

配置修改

主要是 hystrix.command.default.execution.isolation 后面的配置,需要将 hystrix 配置为信号量模式,否则会出现由于隔离策略导致获取不到请求头

# ribbon 配置

ribbon:

OkToRetryOnAllOperations: false #对所有操作请求都进行重试,默认false

ReadTimeout: 5000 #负载均衡超时时间,默认值5000

ConnectTimeout: 5000 #ribbon请求连接的超时时间,默认值2000

MaxAutoRetries: 0 #对当前实例的重试次数,默认0

MaxAutoRetriesNextServer: 1 #对切换实例的重试次数,默认1

# hystrix 配置

hystrix:

command:

default: #default全局有效,service id指定应用有效

execution:

timeout:

#是否开启超时熔断

enabled: true

isolation:

thread:

timeoutInMilliseconds: 10000 #断路器超时时间,默认1000ms

# hystrix 隔离模式改为信号量模式,feign 才能获取到父线程中的请求头

strategy: SEMAPHORE

# 允许的并发量,默认值为 10

semaphore:

maxConcurrentRequests: 100

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅谈java对象结构 对象头 Markword
下一篇:Java Map遍历2种实现方法代码实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~