本文介紹雲訊息佇列 RabbitMQ 版訊息存活時間的核心概念、應用情境、注意事項和設定方式。
什麼是訊息存活時間
在雲訊息佇列 RabbitMQ 版中,訊息存活時間用於限制訊息在Queue中可以存在的時間,如果訊息在Queue中存在的時間超過了設定的訊息存活時間,訊息將會被進行如下處理:
若您未給Queue設定死信Exchange,訊息將被Queue直接丟棄。
若您為Queue設定了死信Exchange,則訊息被丟棄後會被轉寄到死信Exchange,由死信Exchange將其路由到目標Queue。您可以在目標Queue擷取該訊息。更多資訊,請參見死信Exchange。
應用情境
訊息存活時間可用於保障訊息流程通性。例如,某應用的訊息在某些特定時間會劇烈增加,如果您的業務可以接受訊息丟失,您可以通過設定訊息存活時間丟棄堆積的訊息,從而保障訊息流程通性。
訊息存活時間設定規則
雲訊息佇列 RabbitMQ 版支援通過x-message-ttl或expiration設定訊息存活時間,不支援通過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);