第16章 メッセージ有効期限の設定
送信されたメッセージが指定された期間後にコンシューマーに配信されない場合に、そのメッセージがサーバーで期限切れになるように設定できます。これらの期限切れのメッセージは、さらに調査をするために後で使用できます。
コア API を使用したメッセージ有効期限の設定
コア API を使用すると、setExpiration
メソッドを使用してメッセージの有効期限を設定できます。
// The message will expire 5 seconds from now message.setExpiration(System.currentTimeMillis() + 5000);
JMS を使用したメッセージ有効期限の設定
メッセージの送信時に、JMS MessageProducer
が使用する持続時間を設定できます。この値は、setTimeToLive
メソッドを使用してミリ秒単位で指定します。
// Messages sent by this producer will be retained for 5 seconds before expiring producer.setTimeToLive(5000);
プロデューサーの send
メソッドで持続時間を設定すると、メッセージの有効期限をメッセージごとに指定することもできます。
// The last parameter of the send method is the time to live, in milliseconds producer.send(message, DeliveryMode.PERSISTENT, 0, 5000)
期限切れアドレスから消費される有効期限切れのメッセージには、以下のプロパティーがあります。
_AMQ_ORIG_ADDRESS
期限切れメッセージの元のアドレスが含まれる
String
プロパティー。_AMQ_ACTUAL_EXPIRY
期限切れのメッセージの実際の有効期間が含まれる
Long
プロパティー。
16.1. 期限切れアドレス
期限切れアドレスを設定して、有効期限切れのメッセージを送信する場所を指定できます。メッセージの有効期限が切れて期限切れアドレスが指定されていない場合、メッセージはキューから削除されドロップされます。
管理 CLI を使用して、address-setting
の expiry-address
を設定できます。以下の例では、jms.queue.exampleQueue
キューの有効期限切れのメッセージが jms.queue.expiryQueue
期限切れアドレスに送信されます。
/subsystem=messaging-activemq/server=default/address-setting=jms.queue.exampleQueue:write-attribute(name=expiry-address,value=jms.queue.expiryQueue)