如何设置Message ID

更新时间:

如需追踪和识别消息,您可以在云消息队列 RabbitMQ 版的Producer客户端设置Message ID属性,为每条消息设置唯一标识符。本文介绍Message ID的相关概念和设置方法。

什么是Message ID

Message ID(消息标识符)是消息的可选属性,类型为short string。Message ID在业务上通常被设置为唯一,适用于追踪和识别销售单、工单等需要保证消息唯一的场景。云消息队列 RabbitMQ 版服务端不会对消息进行幂等处理。如需实现消息幂等,即如果消息重试多次,消费者端对该重复消息消费多次与消费一次的结果是相同的,并且多次消费没有对系统产生副作用,在为每条消息设置唯一Message ID的基础上,您还需要在云消息队列 RabbitMQ 版的Consumer客户端对消息进行幂等处理,具体信息,请参见消息幂等

设置方法

云消息队列 RabbitMQ 版的Producer客户端设置Basic.Propertiesmessage-id属性。示例代码如下:

Java

AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().messageId("messageid").build(); 
channel.basicPublish("${ExchangeName}", "BindingKey", true, props, ("消息发送Body").getBytes(StandardCharsets.UTF_8));

Python

properties = pika.BasicProperties(app_id='example-publisher', content_type='application/json', 'message_id'='messageid')

PHP

$msg = new AMQPMessage($msgBody, ['application_headers'=>$amqpTable,'content_type' => 'text/plain', 'delivery_mode' => 2,'message_id' => 'messageid',]);

Go

err = ch.Publish( "helloExchange", "hello", false, false, amqp.Publishing { ContentType: "text/plain", Body: []byte(body), MessageId: "messageId", })

Node.js

channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);