RocketMQ消费者

1消费过程幂等

RocketMQ无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。

可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgld,也可以是消息内容中的唯一标识字段,例如订单ld等。

在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)

msgld一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgld的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。

2消费速度慢的处理方式

提高消费并行度

绝大部分消息消费行为都属于10密集型,即可能是操作数据库,或者调用RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量。

通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。

所以,应用必须要设置合理的并行度。如下有几种修改消费并行度的方法:

●同一个ConsumerGroup下,通过增加Consumer实例数量来提高并行度(需要注意的是超

过订阅队列数的Consumer实例无效)。可以通过加机器,或者在已有机器启动多个进程的

方式。

●提高单个Consumer的消费并行线程,通过修改参数consumeThreadMin、consumeThreadMax实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值