rabbitmq - Rabbitmq + Spring AMQP:重新发送消息但没有确认返回
问题描述
我使用spring amqp发送msg,如果ack=false,添加重发逻辑,使用相同的rabbitTemplate
@Bean
public RabbitTemplate customRabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter());
rabbitTemplate.setMandatory(true);
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
RabbitMetaMessage metaMessage = (RabbitMetaMessage) mqMsgUtil.getMetaMsg(cacheKey);
//1 receive ack
if (ack) {
// send success
mqMsgUtil.setMsgSuccess(cacheKey);
SUCESS_SEND = true;
// send failed
} else {
reSendMsg(cacheKey, metaMessage, rabbitTemplate);
}
});
public void reSendMsg(String msgId, RabbitMetaMessage rabbitMetaMessage,RabbitTemplate rabbitTemplate) {
rabbitTemplate.convertAndSend(rabbitMetaMessage)
.....
}
我第一次发送 msg 时可以“1 接收 ack”,但是在 seSendMsg 中并使用 RabbitTemplate 再次发送 msg 时,我无法再次接收 ack。这是怎么回事?
解决方案
推荐阅读
- angular - 为什么过滤rxjs后自定义管道有错误?
- typescript - 如何区分 .ts 文件和 .d.ts
- c++ - 在 C++ 上的函数 gets() 后,字符数组被清除
- sql - 从 2 列中选择数据并显示在 1 列中
- maximo - 在 maximo 资产管理中将值映射到文本框
- tensorflow2.0 - Tensorflow 模型和 Tensorflow lite 模型应该输出相同的结果吗?
- javascript - 当我 PUT 单个值 ReactJS/NodeJs 时如何将旧值保存到 PUT
- javascript - 有没有办法找到浏览器的中心?
- reactjs - 打字稿:ts2307 找不到类型声明,甚至安装了@types/react
- docker - 如何在 Jenkins 中显示外部 URL 作为构建结果