Spring-Boot/AMQP - 处理的消息数量限制
Spring-Boot/AMQP - Limit number of messages processed
我有一个使用 spring-boot AMQP 库的 spring-boot 应用程序。
pom.xml :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
如何让它处理并确认 一条 消息然后优雅地退出?
可以让它在不确认的情况下退出,但似乎无法弄清楚如何确认消息然后退出!
您可以简单地使用 RabbitTemplate.receive()
(或 receiveAndConvert()
)方法之一,而不是使用侦听器容器。
您可以按照以下步骤操作:
- 使用 Spring 的
RabbitListener
作为侦听器(完整示例请参阅 this SO answer)
- 在您的侦听器中声明一个
AtomicInteger
作为计数器 class
- 在您收听消息后增加计数器(即
listen
方法执行时没有任何异常)。 Spring只有方法执行成功才会发送ack
- 如果计数器的值大于
0
(或大于配置的阈值),通过调用stop()
方法停止监听
- 使用
@Value
配置阈值并使用incrementAndget()
方法自动递增计数器
我有一个使用 spring-boot AMQP 库的 spring-boot 应用程序。
pom.xml :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
如何让它处理并确认 一条 消息然后优雅地退出?
可以让它在不确认的情况下退出,但似乎无法弄清楚如何确认消息然后退出!
您可以简单地使用 RabbitTemplate.receive()
(或 receiveAndConvert()
)方法之一,而不是使用侦听器容器。
您可以按照以下步骤操作:
- 使用 Spring 的
RabbitListener
作为侦听器(完整示例请参阅 this SO answer) - 在您的侦听器中声明一个
AtomicInteger
作为计数器 class - 在您收听消息后增加计数器(即
listen
方法执行时没有任何异常)。 Spring只有方法执行成功才会发送ack - 如果计数器的值大于
0
(或大于配置的阈值),通过调用stop()
方法停止监听 - 使用
@Value
配置阈值并使用incrementAndget()
方法自动递增计数器