SpringCloud 传播安全上下文或使用Spring范围
2023-11-22 11:48 更新
如果要将某些线程本地上下文传播到@HystrixCommand
中,则默认声明无效,因为默认声明在线程池中执行命令(如果超时)。通过要求Hystrix使用不同的“ 隔离策略 ”,可以通过配置或直接在批注中切换Hystrix来使用与调用方相同的线程。下面的示例演示了如何在注释中设置线程:
@HystrixCommand(fallbackMethod = "stubMyService", commandProperties = { @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE") } ) ...
如果使用@SessionScope
或@RequestScope
,则同样适用。如果遇到运行时异常,提示它找不到范围内的上下文,则需要使用同一线程。
您还可以选择将hystrix.shareSecurityContext
属性设置为true
。这样做会自动配置一个Hystrix并发策略插件挂钩,以将SecurityContext
从您的主线程转移到Hystrix命令所使用的那个线程。Hystrix不允许注册多个Hystrix并发策略,因此可以通过将自己的HystrixConcurrencyStrategy
声明为Spring bean来使用扩展机制。Spring
Cloud在Spring上下文中寻找您的实现,并将其包装在自己的插件中。
以上内容是否对您有帮助:
更多建议: