RabbitMQのメッセージ有効期限(TTL)を設定する方法は2つあります:

  1. キューのプロパティを通じて設定し、キュー内のすべてのメッセージに同じ有効期限を設定します。
  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),
		})