如需追蹤和識別訊息,您可以在雲訊息佇列 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
屬性。範例程式碼如下:
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().messageId("messageid").build(); channel.basicPublish("${ExchangeName}", "BindingKey", true, props, ("訊息發送Body").getBytes(StandardCharsets.UTF_8));
properties = pika.BasicProperties(app_id='example-publisher', content_type='application/json', 'message_id'='messageid')
$msg = new AMQPMessage($msgBody, ['application_headers'=>$amqpTable,'content_type' => 'text/plain', 'delivery_mode' => 2,'message_id' => 'messageid',]);
err = ch.Publish( "helloExchange", "hello", false, false, amqp.Publishing { ContentType: "text/plain", Body: []byte(body), MessageId: "messageId", })
channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);