消息存活時間
本文介紹云消息隊列 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);