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を使用します。