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

不想你离开。 提交于 2020-10-03 09:06:50

 由于插件得实现方式不一样,会出现这种情况,如果不用插件则不会出现这种情况。

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,插件延迟队列则会回调该方法,因为发送方确实没有投递到队列上,只是在交换器上暂存,等过期时间到了 才会发往队列。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!