如何在消息(@RabbitListener)中创建有状态服务(多个@Autowire),如果新消息,状态应该是干净的。
在@Service的RabbitQM(Spring AMQP)之前,我使用@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
,但现在它不起作用。
答案 0 :(得分:1)
SCOPE_REQUEST
无法与@RabbitListener
一起使用,因为它根本不是网络。您对MVC应用程序中的SCOPE_REQUEST/SESSION
很满意,因为您的服务是从具有适当环境和范围的servlet容器中调用的。
当您在@RabbitListener
中执行逻辑时,您应该记住,这一个对侦听器容器从RabbitMQ队列中轮询的消息作出反应,并且最后一个在由{调整的无限循环中执行它{1}}在特定的帖子中。范围在这里不起作用。
您可以考虑采取哪些措施处理状态,例如Executor
填写在您的ThreadLocal
中,并通过服务道路上的调用堆栈进行访问。这正是Spring @RabbitListener
的管理方式。