20.10.2. メッセージ送信への複製メッセージ検出の使用

送信メッセージに対して複製メッセージの検出を有効にするには、メッセージ上で特別なプロパティーを一意の値に設定する必要があります。好きな値を使用できますが、値が一意となる必要があります。
ターゲットサーバーがこのメッセージを受信すると、特別なプロパティーが設定されているかどうかを確認します。プロパティーが設定されている場合、ターゲットサーバーはヘッダーにその値がある受信したメッセージのメモリーキャッシュをチェックします。サーバーがヘッダーに同じ値があるメッセージを見つけると、クライアントによって送信されたメッセージを無視します。
トランザクションでメッセージを送信する場合、そのトランザクションのすべてのメッセージにプロパティーを設定する必要はありません。トランザクションで 1 度だけ設定する必要があります。サーバーがトランザクションのメッセージの複製を検出した場合、トランザクション全体を無視します。
設定するプロパティーの名前は、org.hornetq.api.core.HDR_DUPLICATE_DETECTION_ID の値によって付与され、その値は _HQ_DUPL_ID になります。このプロパティーの値は、コア API のタイプ byte[] または SimpleString になります。JMS (Java Messaging Service) クライアントでは、一意の値を持つタイプ String である必要があります。簡単に一意の ID を生成するには、UUID を生成します。
下例はコア API のプロパティーを設定する方法を示しています。
...     

ClientMessage message = session.createMessage(true);

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

message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID);

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

Message jmsMessage = session.createMessage();

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

message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);

...