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); ...