Java Spring Boot/AMQP-限制处理的消息数
我有一个使用spring boot AMQP库的spring boot应用程序 pom.xml:Java Spring Boot/AMQP-限制处理的消息数,java,spring-boot,rabbitmq,spring-amqp,Java,Spring Boot,Rabbitmq,Spring Amqp,我有一个使用spring boot AMQP库的spring boot应用程序 pom.xml: org.springframework.boot 弹簧启动机amqp 我如何让它处理并确认一条单一的消息,然后优雅地退出 可以在不确认的情况下退出,但似乎无法确定如何确认消息,然后退出 您只需使用一个rabbitmplate.receive()(或receiveAndConvert())方法,而不必使用侦听器容器。您只需使用一个rabbitmplate.receive()(或receiveAnd
org.springframework.boot
弹簧启动机amqp
我如何让它处理并确认一条单一的消息,然后优雅地退出
可以在不确认的情况下退出,但似乎无法确定如何确认消息,然后退出 您只需使用一个
rabbitmplate.receive()
(或receiveAndConvert()
)方法,而不必使用侦听器容器。您只需使用一个rabbitmplate.receive()
(或receiveAndConvert()
)方法而不是使用侦听器容器。您可以按照以下步骤操作:
- 使用Spring的
作为侦听器(有关完整示例,请参阅)RabbitListener
- 在侦听器类中将
声明为计数器AtomicInteger
- 监听消息后增加计数器(即,
方法执行时无任何异常)。Spring仅在方法成功执行时发送acklisten
- 如果计数器的值大于
(或大于配置的阈值),请通过调用0
方法停止侦听stop()
- 使用
配置阈值,并使用@Value
方法自动递增计数器incrementAndget()
- 使用Spring的
作为侦听器(有关完整示例,请参阅)RabbitListener
- 在侦听器类中将
声明为计数器AtomicInteger
- 监听消息后增加计数器(即,
方法执行时无任何异常)。Spring仅在方法成功执行时发送acklisten
- 如果计数器的值大于
(或大于配置的阈值),请通过调用0
方法停止侦听stop()
- 使用
配置阈值,并使用@Value
方法自动递增计数器incrementAndget()
AtomicInteger
,并在计数达到1时停止消费?就ack而言,只有当您的侦听器
方法正常退出时,Spring才会发送ack。如果调用stop()
,它将不会应答,因此,该消息将可供其他用户使用。@DarshanMehta也许我可以在处理第一条消息结束时增加计数,然后在处理第二条消息开始时退出,如果计数正好达到我指定的限制(在我的情况下为1),incrementAndGet()
是您希望与AtomicInteger一起使用的方法,是的,增加方法末尾的计数并在开头进行检查是一个好主意。我会使用@Value
来配置应用程序在退出前需要读取的消息数。那么,您想确认并只处理一条消息吗?如果队列有100条消息怎么办?@DarshanMehta是的,即使队列有100条消息,我也要处理一条消息并退出。您可以使用与此类似的方法:。可以添加一个AtomicInteger
,并在计数达到1时停止消费?就ack而言,只有当您的侦听器
方法正常退出时,Spring才会发送ack。如果调用stop()
,它将不会应答,因此,该消息将可供其他用户使用。@DarshanMehta也许我可以在处理第一条消息结束时增加计数,然后在处理第二条消息开始时退出,如果计数正好达到我指定的限制(在我的情况下为1),incrementAndGet()
是您希望与AtomicInteger一起使用的方法,是的,增加方法末尾的计数并在开头进行检查是一个好主意。我会使用@Value
来配置应用程序在退出前需要读取的消息数量。因此,这将基于请求使用消息,而不是侦听消息-很好的想法这将基于请求使用消息,而不是侦听消息-很好的主意
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>