如何在消息(@RabbitListener)中创建有状态服务(几个@Autowire),如果有新消息,则状态应该是干净的。
在@Service的RabbitQM(Spring AMQP)之前,我使用了@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS),但现在不起作用。

最佳答案

SCOPE_REQUEST@RabbitListener不兼容,因为它根本不是Web。您对MVC应用程序中的SCOPE_REQUEST/SESSION很满意,因为可以从具有适当环境和范围的servlet容器中调用服务。

当您在@RabbitListener中执行逻辑时,请切记,此响应对侦听器容器从RabbitMQ队列轮询的消息做出反应,而最后一个在Executor旋转的无限循环中进行,特别是线。范围在这里不起作用。

您可能考虑采取的处理状态的方法是在ThreadLocal中填充@RabbitListener并从服务路径中的调用堆栈进行访问。这正是Spring SecurityContext的管理方式。

10-06 04:57