すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RabbitMQ:メッセージ TTL

最終更新日:Jan 14, 2025

このトピックでは、ApsaraMQ for RabbitMQ で使用されるメッセージ有効期間 (TTL) に関する用語を紹介します。また、メッセージ TTL の使用シナリオ、使用上の注意、設定方法についても説明します。

メッセージ TTL とは

ApsaraMQ for RabbitMQ では、メッセージ TTL は、メッセージをキューに保持できる期間を決定します。キュー内のメッセージの保持期間がキューのメッセージ TTL を超えると、メッセージは次のいずれかの方法で処理されます。

  • キューにデッドレター交換が設定されていない場合、メッセージはキューによって破棄されます。

  • キューにデッドレター交換が設定されている場合、メッセージはキューによって破棄され、デッドレター交換に転送されます。その後、デッドレター交換はメッセージをデッドレターキューにルーティングします。デッドレターキュー内のメッセージを取得できます。詳細については、「デッドレター交換」をご参照ください。

使用シナリオ

メッセージ TTL を使用して、メッセージの蓄積を防ぐことができます。たとえば、特定の期間内にアプリケーションのメッセージが劇的に増加する場合があります。期限切れのメッセージを保存する必要がない場合は、メッセージ TTL を指定して期限切れのメッセージを破棄できます。これにより、ビジネスにおけるメッセージの蓄積を防ぎます。

メッセージ TTL を指定する際のルール

  • ApsaraMQ for RabbitMQ では、x-message-ttl または expiration 引数を使用してメッセージ TTL を指定できます。 ApsaraMQ for RabbitMQ では、rabbitmqctl ツールの policy パラメーターを使用してメッセージ TTL を指定することはできません。

  • ApsaraMQ for RabbitMQ コンソールでキューを作成する際に、キューのメッセージ TTL を指定できます。メッセージを送信する際にも、メッセージ TTL を指定できます。

    キューを作成するときとメッセージを送信するときの両方でメッセージ TTL を指定した場合、小さい方の値がメッセージの TTL として使用されます。

  • 遅延メッセージの実際のメッセージ TTL は、次の式を使用して計算されます: Actual message TTL of a delayed message = min {Message-level TTL, queue-level TTL} + delay time。詳細については、「遅延メッセージ」をご参照ください。

  • メッセージ TTL の最大値は、インスタンスでスケジュール済みメッセージの送信に指定されたスケジュール済み間隔と同じです。メッセージ TTL の値は、ミリ秒単位の負でない整数である必要があります。

  • キューのメッセージ TTL が 0 に指定されている場合、メッセージがキューにルーティングされた後、すぐに消費されない限り、メッセージは破棄されるか、キューのデッドレター交換に転送されます。

設定方法

ApsaraMQ for RabbitMQ では、次の方法を使用してメッセージ TTL を指定できます。

  • ApsaraMQ for RabbitMQ コンソール

    ApsaraMQ for RabbitMQ コンソールでキューのメッセージ TTL を指定できます。詳細については、「キューの管理」をご参照ください。

  • OpenAPI エクスプローラー

    OpenAPI エクスプローラー を使用して CreateQueue オペレーションを呼び出し、キューのメッセージ TTL を指定できます。詳細については、「CreateQueue」をご参照ください。

  • オープンソース RabbitMQ SDK

    オープンソース RabbitMQ SDK を使用して、キューまたはメッセージのメッセージ TTL を指定できます。詳細については、「サポートされている SDK」をご参照ください。サンプルコード:

    • x-message-ttl 引数を使用してキューのメッセージ TTL を指定する

      Map<String, Object> props = new HashMap<String, Object>();
      props.put("x-message-ttl", 1000);
      channel.queueDeclare("myqueue", false, false, false, props);
      // キューのメッセージ TTL を指定します。
      
    • expiration 引数を使用してメッセージのメッセージ TTL を指定する

      byte[] messageBodyBytes = "test".getBytes();
      AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
              .expiration("1000")
              .build();
      channel.basicPublish("myqueue", peoperties, messageBodyBytes);
      // メッセージの TTL を指定します。