消息队列AMQP版提供消息存活时间功能,用于限制消息在Queue中的有效期,从而保障消息流通性。本文介绍消息存活时间的核心概念、适用场景、配置方式和注意事项。

核心概念

消息存活时间指消息在Queue中的有效期。如果消息在Queue中的时间超过消息存活时间,则消息被丢弃。

适用场景

消息存活时间可用于保障消息流通性。例如,某应用的消息在某些特定时间会剧烈增加,如果要保障消息流通性,且可以容忍消息丢失,您可以设置消息存活时间。

配置方式

消息队列AMQP版支持以下方式设置Queue中的消息存活时间:

  • 控制台

    您可以在消息队列AMQP版控制台创建Queue时,为其配置消息存活时间。

    1. 登录消息队列AMQP版控制台
    2. 在顶部菜单栏,选择地域。
    3. 在左侧导航栏,单击Queue管理
    4. Queue管理页面,选择实例,选择Vhost,单击创建Queue
    5. 创建Queue对话框,设置Queue属性,然后单击确定create_queue_ttl
  • API

    您可以在通过API创建Queue时,为其配置消息存活时间。详情请参见CreateQueue

  • 客户端

    您可以在消息队列AMQP版客户端创建Queue时,为其配置消息存活时间。您可以通过x-message-ttl设置消息存活时间。例如,在声明一个名称为myqueue的Queue时,设置消息存活时间为1000毫秒。示例代码如下:

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

注意事项

  • 消息存活时间的值必须为非负整型数,单位为毫秒。例如,某条消息的存活时间的值是1000,则代表该消息最多会在Queue中存活1秒。
  • 如果消息存活时间被设置为0,那么当消息到达Queue时,除非该消息被立即投递到消费者,否则该消息会被立即丢弃或转发至目标Queue。