第25章 重複メッセージ検出の設定

送信者が別のサーバーにメッセージを送信する場合、メッセージの送信後、ただし、プロセスが成功したことを示す応答を送信者に送信する前に、ターゲットサーバーまたは接続でエラーが発生する状況があります。このような状況では、メッセージが目的の受信者に正常に送信されたかどうかを送信者が判断することは非常に困難です。送信者が最後のメッセージの再送信を決定する場合、そのアドレスに重複メッセージが送信される可能性があります。

アプリケーションが重複したメッセージをフィルターするロジックを提供しなくてもよいように、JBoss EAP メッセージングでは重複メッセージ検出を設定できます。

25.1. メッセージ送信に重複メッセージ検出を使用する

送信されたメッセージに対して重複メッセージ検出を有効にするには、org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DETECTION_ID プロパティーの値を設定する必要があります。これにより、_AMQ_DUPL_ID に解決され、一意の値になります。ターゲットサーバーがメッセージを受信すると、_AMQ_DUPL_ID プロパティーが設定されている場合は、メモリーキャッシュをチェックして、そのヘッダーの値が含まれるメッセージをすでに受信したかどうかを確認します。すでに受信した場合、このメッセージは無視されます。詳細は、「重複 ID キャッシュの設定」を参照してください。

コア API を使用している場合は、_AMQ_DUPL_ID プロパティーの値を byte[] または SimpleString 型にすることができます。JMS を使用している場合は、String である必要があります。

以下の例は、コア API のプロパティーを設定する方法を示しています。

SimpleString myUniqueID = "This is my unique id";   // Can use a UUID for this

ClientMessage message = session.createMessage(true);
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID);

以下の例は、JMS クライアントのプロパティーを設定する方法を示しています。

String myUniqueID = "This is my unique id";   // Can use a UUID for this

Message jmsMessage = session.createMessage();
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);
重要

重複メッセージは、HDR_DUPLICATE_DETECTION_ID プロパティーを使用して同じトランザクション内に送信されたときは検出されません