MQ推送出现消息丢失问题

Inory丶snow 2019-07-18 02:11:43
请教一个问题,这是我MQ推送信息部分的代码
try {
rabbitTemplate.convertAndSend(exchange, routingKey, demoAlarmInfo); //推送信息到指定exchange
request.setAttribute("data", ResultUtil.success("告警上报成功", demoAlarmInfo)); //保存推送成功记录
} catch (Exception e) {
request.setAttribute("data", ResultUtil.error("mq连接失败", demoAlarmInfo)); //保存MQ连接失败记录
}
现在遇到一个问题,如果短时间内,需要推送很多条数据,会出现推送成功,但是数据部分丢失的问题,比如2秒内本来需要推送15条数据,现在会出现成功推送前10条,后5条数据并没有推送上去,但是我这边本地的推送成功记录里,确实记录的是15条推送成功,请问这个数据丢失,是MQ服务器那边的问题,还是应该我本地进行一定的设置?
如果是我本地推送时的问题,请问该如何修改
...全文
755 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
豫让_______ 2019-07-22
  • 打赏
  • 举报
回复
我给你搜了篇博客https://blog.csdn.net/longji007/article/details/81977490,312应该就是指代routingKey错误的一个错误码吧。不要纠结这些码,没啥意义。
Inory丶snow 2019-07-22
  • 打赏
  • 举报
回复
引用 7 楼 豫让_______ 的回复:
ack是你本地通知给mq是否正常消费的提示。完全是由你本地逻辑定义然后通知给mq的一个标识,ack true标识该消息正常消费,mq会删除该消息。而你的消费端是否能收到消息跟ack无关啊,先收到消息,才会有ack的说法。你交换机正确,队列错误肯定收不到消息啊,config里不是有声明交换机和队列的绑定关系嘛。
问题已经解决了,但是请教下returnedMessage(Message message,int replyCode,String replyText,String exchange,String routingKey),其中的replyCode是指什么额,各返回值分别对应什么意思,我这边如果exchange正确,routingKey错误,会回调return,replyCode值为312.
Inory丶snow 2019-07-22
  • 打赏
  • 举报
回复
引用 9 楼 豫让_______ 的回复:
我给你搜了篇博客https://blog.csdn.net/longji007/article/details/81977490,312应该就是指代routingKey错误的一个错误码吧。不要纠结这些码,没啥意义。
好的,非常感谢您的帮助
豫让_______ 2019-07-19
  • 打赏
  • 举报
回复
引用 3 楼 Inory丶snow 的回复:
[quote=引用 1 楼 豫让_______ 的回复:]
rabbitMq不是有个rabbitmq Management吗,你进去看看queues里面有没有还没消费的消息。

Rabbit MQ有个图形界面,我打算看图像界面里面消息到底时怎么样的。
但是请问下,我该如何访问图形界面?
我这边项目时,对方提供给我MQ的连接方式,包括MQ的port,host,username,password等
那我时应该访问 http:host:port这样吗
我试过打不开···
访问我自己本地的MQ的话网址是 http:localhost:15672
那访问对方提供给我的MQ图形界面,该如何访问[/quote] 图形界面端口一般是15672,mq的端口才是5672吧,你看看你图形界面服务启了没有。你也可以写个消费者监听发的消息嘛,自己写个测试,不要用线上的交换机和routkey,自定义一个,然后自己跑一下看咯。
最后,说不定是你自己哪儿测试开了个消费者监听,把正式服务服务器的消息给消费了?非广播类型的消息不会被重复消费的。
Inory丶snow 2019-07-19
  • 打赏
  • 举报
回复
或者我rabbitTemplate.convertAndSend(exchange, routingKey, demoAlarmInfo);执行完,有没有什么返回值,可以让我来判断该消息是否成功发送,这样我这边也好来检擦消息丢失,到底是我发送方的问题,还是接收方的问题
Inory丶snow 2019-07-19
  • 打赏
  • 举报
回复
引用 1 楼 豫让_______ 的回复:
rabbitMq不是有个rabbitmq Management吗,你进去看看queues里面有没有还没消费的消息。
Rabbit MQ有个图形界面,我打算看图像界面里面消息到底时怎么样的。 但是请问下,我该如何访问图形界面? 我这边项目时,对方提供给我MQ的连接方式,包括MQ的port,host,username,password等 那我时应该访问 http:host:port这样吗 我试过打不开··· 访问我自己本地的MQ的话网址是 http:localhost:15672 那访问对方提供给我的MQ图形界面,该如何访问
豫让_______ 2019-07-19
  • 打赏
  • 举报
回复
ack是你本地通知给mq是否正常消费的提示。完全是由你本地逻辑定义然后通知给mq的一个标识,ack true标识该消息正常消费,mq会删除该消息。而你的消费端是否能收到消息跟ack无关啊,先收到消息,才会有ack的说法。你交换机正确,队列错误肯定收不到消息啊,config里不是有声明交换机和队列的绑定关系嘛。
Inory丶snow 2019-07-19
  • 打赏
  • 举报
回复
引用 5 楼 豫让_______ 的回复:
[quote=引用 3 楼 Inory丶snow 的回复:] [quote=引用 1 楼 豫让_______ 的回复:] rabbitMq不是有个rabbitmq Management吗,你进去看看queues里面有没有还没消费的消息。
Rabbit MQ有个图形界面,我打算看图像界面里面消息到底时怎么样的。 但是请问下,我该如何访问图形界面? 我这边项目时,对方提供给我MQ的连接方式,包括MQ的port,host,username,password等 那我时应该访问 http:host:port这样吗 我试过打不开··· 访问我自己本地的MQ的话网址是 http:localhost:15672 那访问对方提供给我的MQ图形界面,该如何访问[/quote] 图形界面端口一般是15672,mq的端口才是5672吧,你看看你图形界面服务启了没有。你也可以写个消费者监听发的消息嘛,自己写个测试,不要用线上的交换机和routkey,自定义一个,然后自己跑一下看咯。 最后,说不定是你自己哪儿测试开了个消费者监听,把正式服务服务器的消息给消费了?非广播类型的消息不会被重复消费的。[/quote] 我现在尝试写了一个ConfirmCallback的confirm和ReturnCallback的returnedMessage来监听消息发送情况,还是有点问题。 1、再使用ConfirmCallback的confirm时,发送成功时(exchange正确,routingKey正确),此时mq服务器能收到数据,且我本地通过confirm输出ack=true,如果exchange错误,ack=false,并且会输出错误原因。 但是,如果exchange正确,routingKey错误,此时MQ服务器收不到消息,但是我本地confirm还是输出ack=true,请问这个时为什么? 2、我配置好了ReturnCallback的returnedMessage,但是不清楚具体推送消息时什么情况会导致ReturnCallback的returnedMessage方法触发?我看网上的说法时“路由不到正确的队列”时触发returnedMessage,是指exchange正确routingKey错误吗?那我有试过这种清空,并没有触发
qybao 2019-07-18
  • 打赏
  • 举报
回复
单线程还是多线程运行?有没有开启事务或Confirm模式?消息是否已经可能被消费掉?
豫让_______ 2019-07-18
  • 打赏
  • 举报
回复
rabbitMq不是有个rabbitmq Management吗,你进去看看queues里面有没有还没消费的消息。

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧