第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
プロパティーを使用して同じトランザクション内に送信されたときは検出されません。