RabbitMQ使用延迟插件时导致消息始终触发ReturnCallback回调,但实际消息可以被消费,是延迟插件导致的吗?

问题: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);
        });
    }

尝试方案,使用不带插件的延迟队列则不会触发该方法

不用延迟插件,换成死信队列吗

延迟插件是个非默认交换机插件吧,另外起本来就默认第一时间不会路由发去queue,自然必然报错吧,好像可以修改生产的时候的一个参数,规避那个告警。。。

延迟插件是个非默认交换机插件吧,另外起本来就默认第一时间不会路由发去queue,自然必然报错吧,好像可以修改生产的时候的一个参数,规避那个告警。。。额 后来查了一下,看看设mandatory参数为false看看是不是会不报了?