使用Spring ampq在rabbitmq中重新查询消息
我是rabbitmq新手,正在尝试以下场景 ->制作人发送消息 ->消费者收到信息 -执行我自己的逻辑 如果逻辑失败-重新排队 ->如果耗电元件故障指示灯熄灭,请重新输入消息 我已经使用SpringRabbitTemplate实现了基本发送器使用Spring ampq在rabbitmq中重新查询消息,spring,rabbitmq,rabbitmq-exchange,spring-rabbit,Spring,Rabbitmq,Rabbitmq Exchange,Spring Rabbit,我是rabbitmq新手,正在尝试以下场景 ->制作人发送消息 ->消费者收到信息 -执行我自己的逻辑 如果逻辑失败-重新排队 ->如果耗电元件故障指示灯熄灭,请重新输入消息 我已经使用SpringRabbitTemplate实现了基本发送器 rabbitTemplate.convertAndSend(.....); 对于消费者,我实现了一个消息侦听器 public class CustomMessageListener implements MessageListener { @Overri
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。但我不确定如何通过listener实现 使用acknowledge=auto,在侦听器正常退出之前,消息不会被确认,因此您无需做任何额外的事情;如果您的侦听器引发异常或服务器崩溃,消息将保留在队列中。感谢您的快速回复。是否有属性或方法可以忽略该消息或在n次尝试后将该消息发送到死信队列。假设n将被指定为侦听器建议链的重试侦听器。使用RejectAndDontRequeueRecoverer配置拦截器,重试次数用尽时将调用该拦截器;如果原始队列是这样配置的,则消息将发送到DLX/DLQ。或者,您可以使用RepubishMessageRecoverer直接重新发布到另一个队列,并提供附加信息,例如异常的堆栈跟踪。有关更多信息,请参阅。默认的恢复只是正常记录和退出,因此只记录和删除消息。