最近发现系统rabbitmq丢消息比较严重,于是想了些方案来查找原因,给将消息发送方式添加确认机制。 我们在本地模拟了wms发送打标消息的场景. 1. 有事务 2. 先发点对点队列, 再发订
生活随笔
收集整理的這篇文章主要介紹了
最近发现系统rabbitmq丢消息比较严重,于是想了些方案来查找原因,给将消息发送方式添加确认机制。 我们在本地模拟了wms发送打标消息的场景. 1. 有事务 2. 先发点对点队列, 再发订
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近發(fā)現(xiàn)系統(tǒng)rabbitmq丟消息比較嚴(yán)重,于是想了些方案來查找原因,給將消息發(fā)送方式添加確認(rèn)機(jī)制。
3、做完這些操作以后,在代碼中可以如下啟用confirm方式, 這其中confirm中的ack如果為true,可以認(rèn)為是RabbitMQ服務(wù)器已經(jīng)成功接收了消息:
?
我們在本地模擬了wms發(fā)送打標(biāo)消息的場景.
1.?有事務(wù)
2.?先發(fā)點(diǎn)對點(diǎn)隊(duì)列,?再發(fā)訂閱隊(duì)列
3.?批量發(fā)送
4.?在生產(chǎn)環(huán)境與測試環(huán)境的RabbitMQ都進(jìn)行了測試
?
我們在測試的時(shí)候都沒有出現(xiàn)丟失隊(duì)列的情況.
?1、在RabbitMQ配置文件中,開啟確認(rèn)機(jī)制,如下:
| <rabbit:connection-factory id="connectionFactory"?publisher-confirms="true"addresses="${rabbitmq.host}" /> |
2、關(guān)閉amqpTemplate的事務(wù)(因?yàn)镽abbitMQ官網(wǎng)給出的注釋是confirm機(jī)制在事務(wù)情況下是不行的),如下圖:
| <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" channel-transacted="false"?message-converter="jsonMessageConverter"/> |
| ? rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { ? ? ? ? ? @Override ? ? ? ? ? public void confirm(CorrelationData correlationData, boolean ack) { ? ? ? ? ? ? ? System.err.println(correlationData.getId() + ack); ? ? ? ? ? } ? ? ? ? ? }); ? /** ?*? ?* @Title: callJMSclient ?* @Description: TODO(發(fā)送打標(biāo)的JMS通知信息) ?* @param @param textMessage ?* @param @return 設(shè)定文件 ?* @return List<String> lstCommNo 商品編碼List ?* @throws ?*/ @Transactional(propagation = Propagation.NOT_SUPPORTED) private void callJMSclient(String msg) { ?try { // ?rabbitTemplate.convertAndSend("wms.test.queue_direct", msg); // ?logger.info("+++p2p:["+msg+"]+++"); ?rabbitTemplate.convertAndSend("amq.topic", "test.wms.usablestoragechanged.topic", msg,new CorrelationData("success:["+msg+"]")); ?logger.info("&&&p2s:["+msg+"]&&&"); ?}catch (Exception e){ ?logger.info("=============error:["+e.getMessage()+"]========="); ?} } |
這樣就可以在日志里查看有沒有消息發(fā)送失敗。
令我們奇怪的是,當(dāng)把事務(wù)去掉以后的,消息就不再丟失了,具體原因還待分析,先把消息確認(rèn)的方法記錄下哈。
總結(jié)
以上是生活随笔為你收集整理的最近发现系统rabbitmq丢消息比较严重,于是想了些方案来查找原因,给将消息发送方式添加确认机制。 我们在本地模拟了wms发送打标消息的场景. 1. 有事务 2. 先发点对点队列, 再发订的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rabbit MQ windows下安装
- 下一篇: TensorFlow自带例子已经包含了a