由于插件得实现方式不一样,会出现这种情况,如果不用插件则不会出现这种情况。
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange,
String routingKey) {
//如果是延迟队列则忽略,使用插件延迟队列不管成功都会调用
if(Constants.DELAY_EXCHANGE.equals(exchange)) {
return;
}
// 异步通知
log.error("ReturnCallback MQ消息发送失败,replyCode:{}, replyText:{},exchange:{},routingKey:{},消息体:{} 消息属性:{}",
replyCode, replyText, exchange, routingKey, new String(message.getBody()),
message.getMessageProperties());
}
});
-
- 插件形式交换器
交换器注:用代码是创建一个:CustomExchange自定义交换器,类型一定要设置成:x-delayed-message
注:如果配置了发送回调ReturnCallback,插件延迟队列则会回调该方法,因为发送方确实没有投递到队列上,只是在交换器上暂存,等过期时间到了 才会发往队列。
来源:oschina
链接:https://my.oschina.net/xiaominmin/blog/4503811