使用 Spring ampq 在 rabbitmq 中重新排队消息
requeue the message in rabbitmq using Spring ampq
我是 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"
,在监听器正常退出之前消息不会被确认,所以您不需要做任何额外的事情;如果您的侦听器抛出异常或服务器崩溃,消息将保留在队列中。
我是 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"
,在监听器正常退出之前消息不会被确认,所以您不需要做任何额外的事情;如果您的侦听器抛出异常或服务器崩溃,消息将保留在队列中。