すべてのプロダクト
Search
ドキュメントセンター

:メッセージ ID を指定する方法

最終更新日:Mar 14, 2025

ApsaraMQ for RabbitMQ のプロデューサークライアントで、メッセージごとに一意のIDを指定することで、メッセージを追跡および識別できます。このトピックでは、メッセージIDの定義とメッセージIDの指定方法について説明します。

メッセージIDとは

メッセージIDは、short string型のオプションのメッセージ属性です。ほとんどのビジネスシナリオでは、IDはメッセージの一意の識別子です。メッセージIDを使用すると、注文追跡やチケット処理などのシナリオでメッセージを追跡および識別できます。ApsaraMQ for RabbitMQ ブローカーは、メッセージ消費の冪等性を保証しません。消費の冪等性とは、メッセージがコンシューマーに複数回送信された場合、複数の消費操作の結果が1つのメッセージ消費操作の結果と同じであり、繰り返される消費操作がビジネスアプリケーションに悪影響を与えないことを意味します。メッセージ消費の冪等性を確保するには、メッセージごとに一意のIDを指定し、ApsaraMQ for RabbitMQ コンシューマークライアントで冪等消費を実装するために必要なパラメーターを設定する必要があります。詳細については、「メッセージの冪等性」をご参照ください。

設定方法

ApsaraMQ for RabbitMQ プロデューサークライアントで、Basic.Properties フィールドの message-id パラメーターを設定します。サンプルコード:

Java

AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().messageId("messageid").build(); 
// メッセージIDを設定
channel.basicPublish("${ExchangeName}", "RoutingKey", true, props, ("Message body").getBytes(StandardCharsets.UTF_8));

Python

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

PHP

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

Go

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

Node.js

channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
// messageIdを設定。basicPropertiesを使用します。