问题:RabbitMQ使用延迟插件时导致消息始终触发ReturnCallback回调,但实际消息可以被消费,是延迟插件导致的吗?
生产者代码:
public void sendList(String msg, Integer delayTime) {
log.info("======> 商城订单自动收货MQ开始发送 data:{}", msg);
rabbitTemplate.convertAndSend(ShopAutoReceivesMqConfig.SHOP_ORDER_AUTO_RECEIVES_DELAY_EXCHANGE, ShopAutoReceivesMqConfig.SHOP_ORDER_AUTO_RECEIVES_DELAY_ROUTING_KEY, msg, message -> {
//设置超时时间
message.getMessageProperties().setDelay(delayTime);
return message;
});
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
if (!ack) {
log.error(" ---> 待自动收货订单发送到交换机失败 correlationData:{} <---", JSON.toJSONString(correlationData));
} else {
log.info(" 待自动收货订单发送至交换机成功 success ");
}
});
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
log.error(">>> 待自动收货订单发送至交换机队列失败 message:{} ,replyCode:{} ,replyText:{} ,exchange:{} ,routingKey:{} <<< ", message, replyCode, replyText, exchange, routingKey);
});
}
尝试方案,使用不带插件的延迟队列则不会触发该方法