RocketMQ消息重复消费(同一条消息2毫秒内分别在两台机器上被消费)-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

RocketMQ消息重复消费(同一条消息2毫秒内分别在两台机器上被消费)

2018-09-03 17:41:22 21066 5

生产者:
2018-09-03 10:31:10.307 8182147902 [pool-2-thread-4] [INFO ] c.c.g.*.utils.RocketProducerUtil - RocketMq返回状态:SEND_OK,MQMsgId:0A3ABDAC00002A9E0000001D77B3EDE1,msgId:b338350ca72344428eae18c5040f412a

消费者:经查日志显示:
IP --> ..174.16,消费时间:2018-09-03 10:31:10.307 5102948121
IP --> ..174.15,消费时间:2018-09-03 10:31:10.308 5702882940

两个消费者,分别是不同的IP,在相差1毫秒的情况下分别消费一次,共消费2次。即使消费端做幂等处理,对于分布式系统来说,做数据同步也可能会存在延迟会,可能会导致幂等失效。

请问:两台服务器上的消费者,在相差1毫秒的情况下,分别消费两次,这样的现象正常吗?

取消 提交回答
全部回答(5)
  • 游客rppje7k3ul2sc
    2021-09-10 13:37:34

    我问题已解决,就是楼上说的instanceName 的原因,可以把mq客户端rocketmq-spring-boot-starter升级到最新版本,我目前最新版是2.2.1,见org.apache.rocketmq.spring.support.RocketMQUtil.getInstanceName()的方法,在254行处,如下,就解决了重复消费问题

    public static String getInstanceName(String identify) { char separator = '@'; StringBuilder instanceName = new StringBuilder(); instanceName.append(identify).append(separator).append(UtilAll.getPid()).append(separator).append(System.nanoTime()); return instanceName.toString(); }

    0 0
  • hill007300
    2020-03-12 19:41:05

    有可能,如果出现网络波动,重新负载均衡,会出现多台机器在某个时间窗口拿到同一个队列。

    0 0
  • 游客p56i5qm43o4aa
    2019-10-21 04:37:32

    我也遇到了同样的问题,折腾了好久。我的问题是因为给所有消费者(consumer)设置了相同的instanceName导致消息被ConsumerGroup中的每个Consumer都消费一次。 解决方案:去除consumer的instanceName设置。 //consumer.setInstanceName(); 本地环境测试后可以正常消费消息了。

    但使用Docker部署项目后,发现又再次出现重复消费问题。经过一番查询后,发现不设置instanceName时,rocketmq会使用ip@pid作为instanceName(pid代表jvm名字)。又再次导致instanceName相同。 解决方案:设置consumer的instanceName,给一个UUID使instanceName不相同,解决。 consumer.setInstanceName(UUID);

    0 0
  • jonnxu
    2019-07-17 23:03:25

    我也遇到这个问题,不知道楼主有没有找出原因,我这边现象是同一个进程内部不同处理线程同时收到同一条消息,rocketmq日志会有如下这条日志:Note: accumulation consume occurs on mq:*,系统以前很少出现,但是昨天复位业务进程之后频繁出现,目前还没有分析出来为什么有这个问题

    0 0
  • 痞子姜
    2019-07-17 23:03:25

    RocketMQ不解决消息重复推送问题。解决的话一是在客户端做幂等性处理,二是消息有唯一编号,消费完的消息,存到消息表里,这样做去重。第二种对消息系统的吞吐量有巨大的需求,能用客户端去解决的话,最好用客户端的幂等性

    0 0
添加回答
相关问答

1

回答

CMDB 插件开发流程可以在哪里参考?

2022-01-04 15:04:30 327浏览量 回答数 1

1

回答

消息队列RocketMQ版收到告警,但是控制台却查看不到报警规则是什么原因?

2021-01-01 17:21:53 620浏览量 回答数 1

1

回答

消息队列RocketMQ版为查询出来的消息,显示的消费者超过实际的消费者?

2021-01-01 17:15:18 496浏览量 回答数 1

1

回答

消息队列RocketMQ版计费问题:在原有实例上升级成铂金版,支付后却多出一个新的实例?

2021-01-01 17:32:22 527浏览量 回答数 1

1

回答

消息队列RocketMQ版查看消费者状态—连接详情,看到消费者存在消费线程被卡组和现象是什么原因?

2021-01-01 16:35:20 654浏览量 回答数 1

1

回答

消息队列RocketMQ版消费失败的消息可以手动丢弃掉吗?

2021-01-01 16:39:52 1282浏览量 回答数 1

1

回答

【JavaMelody -DB监控】?报错

2020-06-14 15:26:13 307浏览量 回答数 1

1

回答

消息队列 RocketMQ 版如何添加消费堆积告警?

2020-03-28 21:13:46 605浏览量 回答数 1

2

回答

rocketmq消费端消费的消息仍然堆积存在

2017-10-19 11:47:06 6057浏览量 回答数 2

3

回答

SLB按量一年网费需要多少钱?

2015-01-01 18:10:42 7766浏览量 回答数 3
+关注
幸福鳥
开发
文章
问答
问答排行榜
最热
最新
相关电子书
更多
基于RocketMQ Connect 构建全新数据流转处理平
立即下载
消息服务在Serverless中的应用
立即下载
低代码开发师(初级)实战教程
立即下载