Spring boot 没有请求绑定线程错误
我有两个spring引导服务。 A和B 从一个服务中,我使用假客户端调用B服务。 我有一个请求拦截器,它在发送请求之前向请求添加自定义头 这是我的拦截器:Spring boot 没有请求绑定线程错误,spring-boot,spring-cloud-feign,Spring Boot,Spring Cloud Feign,我有两个spring引导服务。 A和B 从一个服务中,我使用假客户端调用B服务。 我有一个请求拦截器,它在发送请求之前向请求添加自定义头 这是我的拦截器: public class HeaderInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate template) { try { Object enc
public class HeaderInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
try {
Object encrypyedData = RequestContextHolder.currentRequestAttributes().getAttribute(""headerName", 0);
if(encrypyedData != null) {
template.header("headerName", encrypyedData.toString());
}else {
System.out.println("Encrypted Data is NULL");
}
} catch(Exception e) {
System.out.println("ankit === "+e.getMessage());
}
}
}
但当我运行这段代码时,我遇到了一个异常:没有找到线程绑定的请求:您是指实际web请求之外的请求属性,还是在最初接收线程之外处理请求?如果您实际上在web请求中操作,并且仍然收到此消息,那么您的代码可能在DispatcherServlet/DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求
我还尝试在服务A中添加此选项
@Bean public RequestContextListener requestContextListener(){
return new RequestContextListener();
}
我已经在用@SpringBootApplication注释的主应用程序文件中添加了这个
还是一样的问题。我错过了什么?也许你在Hystrix上运行你的spring cloud佯装。 Hystrix的默认隔离模式是线程,因此实际的HTTP请求将在Hystrix管理的不同线程上调用。HeaderInterceptor也在该线程上运行 但是,您正在访问RequestContextHolder,它正在使用ThreadLocal。这可能就是你犯错误的原因 尝试在服务上使用以下属性之一 它将禁用hystrix进行伪装
feign:
hystrix:
enabled: false
或者,您可以像下面这样更改hystrix的隔离模式
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
如果有效,你需要选择你的申请方式。只需禁用hystrix或更改隔离策略,或通过另一种方式传递属性。不,我没有使用hystrix。但是我使用的是rxjava。这就是问题的原因,因为它没有创建新线程并使用旧线程。