分布式消息服务ROCKETMQ版-通过消息幂等实现消息去重:实施方法

时间:2024-10-15 17:23:21

实施方法

从上面的消费重复场景可以看到,不同Message ID的消息可能有相同的消息内容,因此Message ID无法作为消息的唯一标识符。RocketMQ可以为消息设置Key,把业务的唯一标识作为消息的唯一标识,从而实现消息的幂等。为消息设置Key的示例代码如下:

Message message = new Message();
message.setKey("Order_id");    // 设置消息的Key,可以使用业务的唯一标识作为Key,例如订单号等。
SentResult sendResult = mqProducer.send(message);

生产者发送消息时,消息已经设置了唯一的Key,在消费者消费消息时,可以根据消息的Key进行幂等处理。消费者通过getKeys()能够读取到消息的唯一标识(如订单号等),业务逻辑围绕该唯一标识进行幂等处理即可。

support.huaweicloud.com/bestpractice-hrm/hrm-bp-002.html