使用Spring ampq

时间:2015-07-08 00:26:33

标签: spring rabbitmq spring-rabbit rabbitmq-exchange spring-rabbitmq

我是rabbitmq的新手,正在尝试以下方案

- >制片人发送消息
  - >消费者收到消息
   - 执行我自己的逻辑

  

如果逻辑失败 - 重新排队

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

我使用Spring rabbitTemplate

实现了基本发件人
rabbitTemplate.convertAndSend(.....);

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

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

并通过弹簧将其添加到容器中

  <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>

直到这部分工作正常。

现在如果**我在监听器中提到的逻辑**失败了。我想重新排列这条消息。我该如何实现呢。从我经历的博客来看,似乎需要重写returnMessage。但我不确定如何通过听众来完成。

1 个答案:

答案 0 :(得分:4)

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