如何在消息(@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 队列轮询的消息使用react,而最后一个则在无限循环中执行此操作由特定线程中的执行器旋转。该范围在这里不起作用。
您可能会考虑处理状态,就像ThreadLocal
填充您的@RabbitListener
并从服务路径的调用堆栈访问。这正是 Spring SecurityContext
的管理方式。
关于java - 如何在 @RabbitListener 中创建有状态服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456833/