全部產品
Search
文件中心

ApsaraMQ for RabbitMQ:訊息存活時間

更新時間:Jun 30, 2024

本文介紹雲訊息佇列 RabbitMQ 版訊息存活時間的核心概念、應用情境、注意事項和設定方式。

什麼是訊息存活時間

雲訊息佇列 RabbitMQ 版中,訊息存活時間用於限制訊息在Queue中可以存在的時間,如果訊息在Queue中存在的時間超過了設定的訊息存活時間,訊息將會被進行如下處理:

  • 若您未給Queue設定死信Exchange,訊息將被Queue直接丟棄。

  • 若您為Queue設定了死信Exchange,則訊息被丟棄後會被轉寄到死信Exchange,由死信Exchange將其路由到目標Queue。您可以在目標Queue擷取該訊息。更多資訊,請參見死信Exchange

應用情境

訊息存活時間可用於保障訊息流程通性。例如,某應用的訊息在某些特定時間會劇烈增加,如果您的業務可以接受訊息丟失,您可以通過設定訊息存活時間丟棄堆積的訊息,從而保障訊息流程通性。

訊息存活時間設定規則

  • 雲訊息佇列 RabbitMQ 版支援通過x-message-ttlexpiration設定訊息存活時間,不支援通過rabbitmqctl工具的policy進行設定。

  • 雲訊息佇列 RabbitMQ 版支援在建立Queue時為Queue設定訊息存活時間,同時支援在訊息發送時為訊息設定存活時間。

    如果兩個同時設定,則取最小的時間作為訊息的存活時間。

  • 延時訊息的實際存活時間=min{訊息級存活時間, Queue層級存活時間}+延時時間。延時訊息的具體資訊,請參見延時訊息

  • 訊息存活時間的取值上限和執行個體的定時時間長度一致;且取值必須為非負整型數,單位為毫秒。

  • 如果訊息存活時間被設定為0,則訊息到達Queue時,除非立即被消費者消費,否則會被立即丟棄或轉寄到死信Exchange。

設定方式

雲訊息佇列 RabbitMQ 版支援您通過以下方式設定訊息存活時間:

  • 雲訊息佇列 RabbitMQ 版控制台

    您可以通過雲訊息佇列 RabbitMQ 版控制台為指定Queue設定訊息存活時間。具體操作,請參見Queue管理

  • OpenAPI Explorer

    您可以通過OpenAPI Explorer調用CreateQueue介面,為指定Queue設定訊息存活時間。更多資訊,請參見CreateQueue

  • 開源RabbitMQ SDK

    您可以通過開源RabbitMQ SDK為指定Queue或某條訊息設定訊息存活時間。更多資訊,請參見SDK列表及範例程式碼。範例程式碼如下:

    • 通過x-message-ttl設定隊列層級的訊息存活時間

      Map<String, Object> props = new HashMap<String, Object>();
      props.put("x-message-ttl", 1000);
      channel.queueDeclare("myqueue", false, false, false, props);
    • 通過expiration設定訊息層級的訊息存活時間

      byte[] messageBodyBytes = "test".getBytes();
      AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
              .expiration("1000")
              .build();
      channel.basicPublish("myqueue", peoperties, messageBodyBytes);