java - 如何在 @RabbitListener 中创建有状态服务

标签 java spring spring-amqp spring-rabbit

如何在消息(@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/

相关文章:

java - 不理解 Java EE 中上下文的概念

java - 如何使用 RabbitMQ 和 Spring-AMQP 通过 MQTT 传输并在 AMQP 上接收

java - Spring RabbitListener 与 RoutingConnectionFactory

java - 如何使用 OneSignal 打开特定 Activity ?

java - 使用 Hibernate 配置 Spring。创建名称为 'usersDao' : Unsatisfied dependency expressed through field 'sessionFactory' 的 bean 时出错

java - getsupportActionBar().setDisplayHomeAsUpEnabled(true).setDisplayHomeAsUpEnabled(true) 抛出 NullPointerException

java - 无法解析导入 javax.servlet.ServletRegistration

java - RabbitMQ队列问题。消息监听器不消费前两条消息

java - Spring Boot数据源延迟初始化

java - 如何标记Java代码使其未编译