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