spring - 使用 Spring amqp 在 rabbitmq 中重新排队消息

标签 spring rabbitmq rabbitmq-exchange spring-rabbit

我是 rabbitmq 的新手,正在尝试以下场景

-->生产者发送消息
--> 消费者收到消息
-- 执行我自己的逻辑

if the logic fails - requeue

--> 如果消费者失败(机器宕机),则重新排队消息

我已经使用 Spring rabbitTemplate 实现了基本的发送器

rabbitTemplate.convertAndSend(.....);

我为消费者实现了一个消息监听器

public class CustomMessageListener implements MessageListener {
@Override
    public void onMessage(Message message) {
       //** my own logic**
   }
}

并通过spring添加到容器中

  <bean id="aListener" class="com.sample.CustomMessageListener" autowire="byName"/>

 <rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory"  acknowledge="auto" prefetch="750" concurrency="5" >
    <rabbit:listener ref="aListener" queues="reportQueue"/>
</rabbit:listener-container>

它在这部分之前工作正常。

现在如果监听器中提到的**我自己的逻辑**失败了。我想重新排队消息。我怎样才能实现这个。从我浏览过的博客来看,returnedMessage 似乎需要覆盖。但我不确定如何通过监听器完成。

最佳答案

使用acknowledge="auto",在监听器正常退出之前消息不会被确认,所以您不需要做任何额外的事情;如果您的监听器抛出异常或服务器崩溃,消息将保留在队列中。

关于spring - 使用 Spring amqp 在 rabbitmq 中重新排队消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281589/

相关文章:

java - 仅向数据库表添加一次值

java - 如何在 Spring Flux 错误处理程序中访问引用源对象?

spring - 在其他模式之前定义了通用匹配模式('/**')

node.js - 使用 symfonyrabbitMq 进行 NodeJs 通信

c# - 为什么要在 RabbitMQ 中声明 Exchange?

java - 异常 : java. lang.IllegalArgumentException : Pointcut is not well-formed Error?

c# - 使用 C# 连接 RabbitMQ

windows-services - RabbitMQ Windows - 自动启动服务器

java - RabbitMQ,如何在 n 次重新排队尝试后删除消息

rabbitmq - rabbitmq的兑换次数有限制吗?