【发布时间】:2016-03-07 21:13:18
【问题描述】:
我想转发一个带有假装客户端 RequestInterceptor 的请求标头,但是在 RequestInterceptor.apply 内,RequestContextHolder.getRequestAttributes() 是 null,SecurityContextHolder.getContext().getAuthentication() 也是如此(我最终也可以获得我的标头的值)。
这在升级到 Spring-Cloud Brixton 之前可以正常工作,现在 hystrix 命令可能必须在单独的线程中运行,因为更改为以下参数可以解决问题:
hystrix.command.default.execution.isolation.strategy: SEMAPHORE
现在,如果没有必要,我不太热衷于更改这种默认值,现在是否有另一种推荐的转发标头的方式?
谢谢
【问题讨论】:
-
你可以将
@RequestHeader传递给一个feign方法。您还可以使用hystrix.command.<methodname>.execution.isolation.strategy: SEMAPHORE单独将每个假装调用设置为 SEMAPHORE。 -
@spencergibb :谢谢,我就是这么想的。我将为我的项目的文档添加注释。
-
我认为我们希望以一种简单的方式配置线程与信号量的隔离。
-
@spencergibb :这可能会有所帮助......但根据 netflix 文档,建议使用
THREAD隔离策略 (github.com/Netflix/Hystrix/wiki/…)。就我而言,我认为更改隔离级别以简化开发体验并不是一个好主意……我们将采用@RequestHeader解决方案。非常感谢 Spring Cloud 的出色工作:-) -
@SébastienNussbaumer 你有例子吗?我不太明白您如何访问拦截器中的 RequestHeader,即 apply 方法。我面临一个类似的问题,即线程本地变量由于第二个线程而返回 null。
标签: spring-boot spring-cloud netflix-feign