分布式消息服务RabbitMQ版
分布式消息服务RabbitMQ版
- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
- API参考
- SDK参考
-
常见问题
-
实例问题
- RabbitMQ使用的版本是多少?
- RabbitMQ实例SSL连接的协议版本号是多少?
- 创建实例时为什么无法查看子网和安全组等信息?
- RabbitMQ集群实例如何均衡分发请求到每个虚拟机?
- RabbitMQ实例集群内部的队列是否有冗余备份?
- RabbitMQ实例是否支持持久化,如何定时备份数据?
- RabbitMQ实例开启SSL后,证书怎么获取?
- RabbitMQ实例的SSL开关是否支持修改?
- RabbitMQ实例是否支持扩容?
- RabbitMQ支持双向认证吗?
- RabbitMQ支持升级CPU和内存吗?
- 如何关闭RabbitMQ的WebUI?
- 实例是否支持修改可用区?
- 如何获取region id?
- 为什么不能选择2个可用区?
- 单机RabbitMQ实例如何变更为集群实例?
- RabbitMQ实例创建后,能修改VPC和子网吗?
- 连接问题
- 消息问题
- 监控告警问题
-
实例问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
配置RabbitMQ TTL
TTL(Time To Live)即过期时间。消息在队列中的生存时间超过了TTL后,消息会被丢弃,如果队列设置了死信交换机,丢弃的消息会被转发到死信交换机,由死信交换机将其路由到死信队列。更多关于TTL的说明,请参考TTL。
RabbitMQ支持设置消息和队列的TTL,消息的TTL可以通过以下两种方法设置:
- 通过队列属性设置:队列中所有消息的具有相同的过期时间。
- 对消息本身单独设置:每条消息可以设置不同的TTL。
如果两种方法同时使用,以较小的TTL为准。
TTL是RabbitMQ中需要慎用的特性,它可能会对性能产生负面影响。
设置队列TTL
通过channel.queueDeclare方法中的“x-expires”参数控制队列被自动删除前处于未使用状态的时间。未使用是指队列中没有任何消费者,也没有被重新声明,并且在过期时间前也未调用过Basic.Get命令。“x-expires”参数的值必须为非零整数,单位为ms。
以下示例演示在Java客户端设置队列TTL。
Map<String, Object> args = new HashMap<String, Object>(); args.put("x-expires", 1800000); //设置队列TTL为1800000ms channel.queueDeclare("myqueue", false, false, false, args);
设置消息TTL
- 通过队列属性设置消息TTL:
在channel.queueDeclare方法中加入“x-message-ttl”参数,此参数的值必须为非零整数,单位为ms。
以下示例演示在Java客户端通过队列属性设置消息TTL。
Map<String,Object> arg = new HashMap<String, Object>(); arg.put("x-message-ttl",6000); //设置队列的消息TTL为6000ms channel.queueDeclare("normalQueue",true,false,false,arg);
- 对消息本身单独设置TTL:
在channel.basicPublish方法中加入“expiration”参数,此参数的值必须为非零整数,单位为ms。
以下示例演示在Java客户端对消息本身单独设置TTL。
byte[] messageBodyBytes = "Hello, world!".getBytes(); AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder() .expiration("60000") //设置消息的TTL为60000ms .build(); channel.basicPublish("my-exchange", "routing-key", properties, messageBodyBytes);
父主题: 配置高级特性