当前位置: 代码网 > 科技>操作系统>Windows > RabbitMQ之ttl(过期消息)解读

RabbitMQ之ttl(过期消息)解读

2024年08月06日 Windows 我要评论
TTL),也就是过期时间,RabbitMQ中可以对消息和队列设置TTL(消息的过期时间),消息在队列的生存时间一旦超过设置的TTL值,就称为dead message, 消费者将无法再收到该消息。当队列中的消息存留时间超过了配置的生存时间(TTL),则称该消息已死亡。注意,同一个消息被路由到不同的队列将拥有不同的过期时间,又或者永远不会过期。这取决于消息所存在的队列。一个队列中的死亡消息不会影响到其他队列中与之相同消息的生命周期。

目录

基本介绍

概述 

设置方式

 java代码中实操设置

设置单条消息的过期时间

通过队列属性设置消息过期时间 

设置消息的ttl特殊情况说明 

通过policy为队列设置消息的ttl

队列的ttl

使用policy设置队列的ttl

在声明时使用x-arguments设置队列的ttl


基本介绍

概述 

ttltime to live),也就是过期时间,rabbitmq中可以对消息和队列设置ttl(消息的过期时间),消息在队列的生存时间一旦超过设置的ttl值,就称为dead message, 消费者将无法再收到该消息。

设置方式

  1. 通过队列属性设置:队列中所有消息都有相同的过期时间

  2. 对消息进行单独设置:每条消息ttl可以不同

设置队列的过期时间,则消息到过期时间后会从队列删除

设置消息的过期时间,会在消息投递给消费者的时候判断,是否过期,过期则删除

 java代码中实操设置

设置单条消息的过期时间

messageproperties messageproperties = new messageproperties();
messageproperties.setexpiration("15000"); // 设置过期时间,单位:毫秒
message message = new message(json.getbytes(), messageproperties);
//发送消息
amqptemplate.convertandsend(rabbitconfig.direct_exchange, rabbitconfig.direct_routingkey, message);
system.out.println("发送完毕:" + new date());

通过队列属性设置消息过期时间 

@bean
public queue directqueue() {
    map<string, object> arguments = new hashmap<>();
    arguments.put("x-message-ttl", 10000);
    return new queue(direct_queue, true, false, false, arguments);
}

设置消息的ttl特殊情况说明 

  • 不设置,则表示永不过期
  • 设置为0,则表示,如果不可以立刻被消费,则删除

通过policy为队列设置消息的ttl

使用policy设置消息的ttl,需要执行“message-ttl”的值:

rabbitmqctl set_policy ttl ".*" '{"message-ttl:60000"}' --apply-to queues

通过以上命令,为所有的队列都设置了一个60s的消息有效期。

队列的ttl

ttl也可以给队列本设置,不仅仅是队列内容。队列将在不被使用(比如,没有消费者)后的一段时间内过期。这个特性可以和队列的自动删除属性(auto-delete queue property)一块使用。

服务器保证如果队列在最近的过期时间内没有被使用,那么该队列将会被删除。但是不保证在过期后能够以多快的速度删除。当服务器重启时,队列的租期重新开始计算。

使用policy设置队列的ttl

设置队列不再使用后40分钟过期:

rabbitmqctl set_policy expiry ".*" '{"expires" : 2400000}' --apply-to queues

在声明时使用x-arguments设置队列的ttl

map<string, object> args = new hashmap<>();
args.put("x-expires", 1800000);
channel.queuedeclare("myqueue", false, false, false, args);

 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com