簡體   English   中英

rocketMQTemplate.asyncSend 在 MessageDecoder.messageProperties2String 處拋出 ConcurrentModificationException

[英]rocketMQTemplate.asyncSend throws ConcurrentModificationException at MessageDecoder.messageProperties2String

我正在使用rocketmq-spring發送消息,版本為 2.1.0,有時我在 org.apache.rocketmq.common.message.MessageDecoder.messageProperties2String(MessageDecoder.java:414) 收到 ConcurrentModificationException,以下是詳細日志。 謝謝!

 #[xx, 10.xx.52] INFO 2022-05-07 15:31:11.043 [XNIO-1 task-74, 29de7f06241a3313, 29de7f06241a3313] com.xx.common.IpProducerService.asyncSendMessage:45 - contentMap{refNo=xx, system=xx, ip=null, platformId=xx, userId=xxx} #[fp, 10.xx.52] INFO 2022-05-07 15:31:11.043 [XNIO-1 task-74, 29de7f06241a3313, 29de7f06241a3313] com.xx.rocketmq.producer.RocketMqProducer.asyncInfo:19 - -=-=-= [Async Sending Message] -=-=-= Topic = TOPIC_xx_xx Tag = MessageId = null DelayLevel = 0 Content = {"refNo":"xx","system":"xx","platformId":"xx","userId":"xx"} #[fp, 10.xx.52] ERROR 2022-05-07 15:31:11.044 [AsyncSenderExecutor_3, , ] com.xx.rocketmq.producer.ProduceCallBack.onException:32 - asyncSendMessage caused exception. java.util.ConcurrentModificationException: null at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437) at java.util.HashMap$EntryIterator.next(HashMap.java:1471) at java.util.HashMap$EntryIterator.next(HashMap.java:1469) at org.apache.rocketmq.common.message.MessageDecoder.messageProperties2String(MessageDecoder.java:414) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:790) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:584) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.access$300(DefaultMQProducerImpl.java:97) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl$4.run(DefaultMQProducerImpl.java:511) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) #[xx, 10.xx.52] INFO 2022-05-07 15:31:11.044 [AsyncSenderExecutor_3, , ] com.xx.common.IpProducerService.handleResult:49 - async produce status is F

使用不同的 rocketMQTemplates 實例發送相同的消息。

asyncSend 是在 rocketMQTemplates 中的 ThreadPool 上做的,那里有很多線程,所以你不能使用不同的 rocketMQTemplates 發送相同的消息(相同的消息使用相同的屬性 HashMap,不是線程安全的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM