producer反复发送, RocketMQ的broker是不论的, Kafka开启幂等后, 每个音讯都会带一个"过程pid+topic+自增序列号"的惟一标识, 重试的音讯的惟一标识是雷同的.
consumer反复生产, 能够用bitmap来做去重.前提是mq必须有自定义路由, 让同一个音讯发到同一个队列, 反复的音讯会在同一个队列. 一个consumer可能对应多个队列(或分区),那么就须要用一个map或list来别离保留各个分区的bitmap,因为bitmap是数组下标来判断是否曾经生产, 所以音讯的惟一id要是数字, 如果是字符+数字, 也得是枚举类型的字符, 这样就只能用map来对枚举字段进行维度划分. 这样搞有个问题, 就是rebalance的时候, 这种计划可能还是会产生反复生产, 解决方案就是监听rebalance, rebalance之后, 就把本人的bitmap播送进来(能够用zk,redis,也能够发一个mq), consumer会取到rebalance之后本人负责的队列的bitmap