网站后期的维护,临沧高端网站建设,西安广告网站制作,北京盛赛车网站开发这篇文章和大家分享Producer发布消息时如何设置消息过期时间#xff0c;包括队列级别和消息级别#xff0c;还有如何设置队列的过期时间。
消息过期时间
给消息设置TTL#xff0c;在超过TTL值后#xff0c;消息就会变成dead message#xff08;死信#xff09;#xf…这篇文章和大家分享Producer发布消息时如何设置消息过期时间包括队列级别和消息级别还有如何设置队列的过期时间。
消息过期时间
给消息设置TTL在超过TTL值后消息就会变成dead message死信订阅此队列的消费者无法消费也不是绝地的后续文章会介绍解决办法。只需要在申明队列的时候设置x-message-ttl 值即可注意这种方式是队列级别的也就是队列中消息的过期时间都是一样的。下面是代码实现。
HashMap args new HashMap();
args.put(x-message-ttl, 5 * 1000);
channel.queueDeclare(queue, true, false, false, args);
如果不设置消息的ttl消息不会过期如果ttl设置为0除非可以直接投递给消费者否则消息会被丢弃。
每条消息可以设置不同的TTL所以每条消息在被投递到消费者之前才会判断消息是否过期这样就会存在一种情况后面的消息比前面的先过期但是消费者依然不能消费到后面的消息必须前面的消息先被投递到消费者RabbitMQ就是采用这种方案的。下面用一张图帮助理解。
设置消息级别的过期时间的代码实例如下。
AMQP.BasicProperties.Builder builder new AMQP.BasicProperties.Builder();
builder.deliveryMode(2); // 持久化消息
builder expiration( 60000 ); // 设置 TTL60000ms
AMQP.BasicProperties properties builder.build();
channel.basicPublish(exchangeName, routingKey, mandatory, properties, ttlTestMessage.getBytes());
队列过期时间
RabbitMQ不仅支持消息的TTL还支持队列级别的TTL可以通过x-expires 参数控制在队列删除之前处于未使用状态的时间比如设置为1000表示队列在1s之内没有被使用就会被删除。注意队列级别的TTL不能设置为0。下面是代码实现。
HashMap args new HashMap();
args.put(x-expires, 20000);
channel.queueDeclare(queue, true, false,false, args);
队列级别的TTL和消息级别的TTL不一样因为不用考虑每条消息的TTL只要队列到了TTL就可以被删除。
好了以上就是关于Producer设置消息级别和队列级别的TTL以及设置队列本身的TTL
RabbitMQ系列文章会陆续更新欢迎各位小伙伴关注后面的技术分享。