Spring boot 没有请求绑定线程错误

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

我有两个spring引导服务。 A和B

从一个服务中,我使用假客户端调用B服务。 我有一个请求拦截器,它在发送请求之前向请求添加自定义头

这是我的拦截器:

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。这就是问题的原因,因为它没有创建新线程并使用旧线程。