首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用RocketMQ时,我通过异步发送消息,有时会抛出ConcurrentModificationException

在使用RocketMQ时,我通过异步发送消息,有时会抛出ConcurrentModificationException
EN

Stack Overflow用户
提问于 2021-03-26 22:09:30
回答 1查看 82关注 0票数 0

我只是发送了一个字符串,我不知道为什么会发生这种情况。客户端-版本: 4.5.2服务器-版本: 4.5.2

希望有人能帮助我!

enter image description here

enter image description here

代码语言:javascript
复制
private void sendMission(String pushId) {

   try {

       Message message = new Message();

       message.setTopic(missionTpoic);

       message.setBody(pushId.getBytes("utf-8"));

       log.info("sendMission to MQ begin , message : {}", message);

       rocketMQService.getProducer().send(message, new SendCallback() {

           @Override

           public void onSuccess(SendResult sendResult) {

               log.info( "======== onSuccess ========== {}", sendResult);

           }

           @Override

           public void onException(Throwable e) {

               log.error( "======== onException ==========", e);

           }

       }, 10000L);

       log.info("sendMission to MQ end, message : {}", message);

   } catch (Exception e) {

       throw new BusinessRuntimeException(BaseExceptionCode.SYSTEM_ERROR.getAdminCode(), e, "Occur a error when push message into mq.");

   }

   log.info("sendMissionDone!!! pushId : {}", pushId);

}

例外情况如下:

2021-03-26 16:06:13 {:} ERROR AsyncSenderExecutor_1 c.p.b.p.c.SuperPushMissionExecutor:138 -- = onException =

java.util.ConcurrentModificationException:空

在java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)

在java.util.HashMap$EntryIterator.next(HashMap.java:1479)

在java.util.HashMap$EntryIterator.next(HashMap.java:1477)

在org.apache.rocketmq.common.message.MessageDecoder.messageProperties2String(MessageDecoder.java:387)

在org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:767)

在org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:557)

在org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.access$300(DefaultMQProducerImpl.java:90)

在org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl$3.run(DefaultMQProducerImpl.java:491)

在java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

在java.util.concurrent.FutureTask.run(FutureTask.java:266)

在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

在java.lang.Thread.run(Thread.java:748)

EN

回答 1

Stack Overflow用户

发布于 2021-05-25 01:44:39

我不知道问题是不是solved.It看起来像"rocketMQService.getProducer()“启动一个threadPool并使用多线程发送相同的”消息“,而"message.properties”是基于HashMap的,当使用线程访问HashMap时,它会抛出ConcurrentModificationException。

因此,解决方案是检查"rocketMQService.getProducer()“上的代码,不要使用多线程发送相同的”消息“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66818527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档