本文介绍消息队列RabbitMQ版消息存活时间的核心概念、应用场景、注意事项和设置方式。

什么是消息存活时间

消息队列RabbitMQ版中,消息存活时间用于限制消息在Queue中可以存在的时间,如果消息在Queue中存在的时间超过了设置的消息存活时间,则消息被Queue丢弃。

说明 如果您为Queue设置了死信Exchange,则超过消息存活时间的消息被丢弃后会被转发到死信Exchange,由死信Exchange将其路由到目标Queue。您可以在目标Queue获取该消息。更多信息,请参见死信Exchange

应用场景

消息存活时间可用于保障消息流通性。例如,某应用的消息在某些特定时间会剧烈增加,如果您的业务可以接受消息丢失,您可以通过设置消息存活时间丢弃堆积的消息,从而保障消息流通性。

注意事项

  • 仅支持通过x-message-ttl来设置消息存活时间,不支持通过rabbitmqctl工具的policy来设置消息存活时间。
  • 仅支持在创建Queue时为Queue设置消息存活时间,不支持在发送消息时为消息设置消息存活时间。

    如果您在发送消息时为消息设置了消息存活时间,则该消息存活时间实际是无效的。

  • 消息存活时间的值必须为非负整型数,单位为毫秒。
  • 如果消息存活时间被设置为0,则消息到达Queue时,除非立即被消费者消费,否则会被立即丢弃或转发到死信Exchange。

设置方式

消息队列RabbitMQ版支持您通过以下方式设置消息存活时间:

  • 消息队列RabbitMQ版控制台

    您可以通过消息队列RabbitMQ版控制台设置消息存活时间。具体操作,请参见创建Queue

  • OpenAPI Explorer

    您可以通过OpenAPI Explorer调用CreateQueue设置消息存活时间。更多信息,请参见CreateQueue

  • 开源RabbitMQ SDK

    您可以通过开源RabbitMQ SDK设置消息存活时间。更多信息,请参见SDK概述。示例代码如下:

    Map<String, Object> props = new HashMap<String, Object>();
    props.put("x-message-ttl", 1000);
    channel.queueDeclare("myqueue", false, false, false, props);
    
    var props = new Dictionary<string, object>();
    props.Add("x-message-ttl", 1000);
    model.QueueDeclare("myqueue", false, false, false, props);