RabbitMQのメッセージ有効期限(TTL)を設定する方法は2つあります:
- キューのプロパティを通じて設定し、キュー内のすべてのメッセージに同じ有効期限を設定します。
- 各メッセージ個別に有効期限を設定し、それぞれ異なるTTLを可能にします。両方の方法を併用する場合、メッセージのTTLは2つの値のうち小さい方が適用されます。
ヒント:キューのプロパティを使用してメッセージの有効期限を設定する場合、メッセージが期限切れになるとキューから削除されます。2番目の方法では、メッセージが期限切れになっても、それがコンシューマーに配信される前に各メッセージの有効期限がチェックされるため、すぐには削除されません。
以下は、Golangを使用したこれの設定方法のデモンストレーションで、他のプログラミング言語と同様です。
キューのTTLを設定
キューのプロパティ(x-message-ttl)を通じてメッセージの有効期限を設定します。
// キューのプロパティ
props := make(map[string]interface{})
// メッセージの有効期限は60秒
props["x-message-ttl"] = 60000
q, err := ch.QueueDeclare(
"tizi365.ttl.hello", // キュー名
true, // キューを永続化するかどうか
false,
false,
false,
props, // キューのプロパティを設定
)
メッセージのTTLを設定
メッセージのプロパティを通じてメッセージの有効期限を設定します
err = ch.Publish(
"tizi365", // Exchange名
"", // ルーティングキー
false,
false,
amqp.Publishing{
Expiration: "30000", // 有効期限は30秒
ContentType: "text/plain",
Body: []byte(body),
})