使用Spring ampq在rabbitmq中重新排队消息

Pra*_*eep 3 spring rabbitmq spring-rabbit rabbitmq-exchange

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

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

如果逻辑失败 - 重新排队

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

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

rabbitTemplate.convertAndSend(.....);
Run Code Online (Sandbox Code Playgroud)

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

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

并通过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>
Run Code Online (Sandbox Code Playgroud)

直到这一部分它工作正常。

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

Gar*_*ell 5

使用acknowledge="auto",消息在侦听器正常退出之前不会被确认,因此您无需执行任何额外操作;如果您的侦听器抛出异常或服务器崩溃,该消息将保留在队列中。