关键词:
RabbitMq高级特性之TTL 存活时间/过期时间
前提
一、每条消息设置过期时间
1.更改ProducerTest.java文件
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class producerTest
@Resource
private RabbitTemplate rabbitTemplate;
@Test
public void test()
MessagePostProcessor messagePostProcessor = new MessagePostProcessor()
@Override
public Message postProcessMessage(Message message) throws AmqpException
//设置消息 3秒后过期
message.getMessageProperties().setExpiration("3000");
return message;
;
String routingKey = "item.insert";
int count = 1;
while (count <= 9)
String message = "发送第"+count+"条消息";
//log.debug("路由键:",routingKey);
if (count % 3 == 0)
//给其中的第3 6 9条消息添加过期时间
rabbitTemplate.convertAndSend(RabbitConfig.DIRECT_EXCHANGE,"",message,messagePostProcessor);
else
rabbitTemplate.convertAndSend(RabbitConfig.TOPIC_EXCHANGE_NAME,routingKey,message);
count++;
log.debug("发送成功");
二、整个 Queue 队列设置过期时间
1.更改RabbitMqConfig.java文件
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* RabbitMq 配置类
*/
@Configuration
public class RabbitMqConfig
private static final String TOPIC_EXCHANGE_NAME = "topic_exchange";
private static final String TOPIC_QUEUE_NAME = "topic_queue";
/**
* 创建 交换机
* @return
*/
@Bean
public Exchange itemTopicExchange()
return ExchangeBuilder.topicExchange(TOPIC_EXCHANGE_NAME).build();
/**
* 创建 队列
* @return
*/
@Bean
public Queue itemQueue()
//QueueBuilder.durable(TOPIC_QUEUE_NAME).withArgument("x-message-ttl",3000).build();
//与下句代码 效果一致 写一个就可以
return QueueBuilder.durable(TOPIC_QUEUE_NAME).ttl(3000).build();
/**
* 绑定 交换机与队列
* @param exchange
* @param queue
* @return
*/
@Bean
public Binding itemQueueExchange(@Qualifier("itemTopicExchange") Exchange exchange, @Qualifier("itemQueue") Queue queue)
return BindingBuilder.bind(queue).to(exchange).with("item.#").noargs();
三、测试
直接运行ProducerTest.java单元测试即可,为了达到自动过期,消费端不可启动
四、小结
两种模式可同时起作用,哪个时间短,就会执行哪个
Queue级别的过期时间一到,会自动丢掉消息,不会等到消费者来取消息.
Message级别的消息过期后,不会自动抹去,而是等到消费者获取消息时进行判断是否过期,如过期则丢掉.
rabbitmq高级特性之死信队列通俗易懂超详细内含案例(代码片段)
RabbitMq高级特性之死信队列又称死信交换机DLX当消息成为Deadmessage后,会重新发送到另一个交换机,这个交换机就是DLX消息成为死信的情况公有三种:队列消息长度达到限制消费者拒接消费消息basicNack/basicReject,并且不把消息重新放回... 查看详情
rabbitmq学习笔记5:rabbitmq高级
...都可以被消费者接收获取;过了之后消息将自动被删除。2.RabbitMQ可以对消息和队列设置TTL,目前有两种方法可以设置:第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。第二种方法是对消息进行单独设置,... 查看详情
rabbitmq之过期时间(ttl)
参考技术ATTL(TimeToLive),即过期时间。RabbitMQ可以对消息和队列设置TTL。两种方法可以设置消息的TTL:(1):通过队列属性设置,队列中所有消息都有相同的过期时间。(2):对消息本身进行单独设置,每条消息的TTL可以不同。注:如... 查看详情
rabbitmq消息过期时间(ttl)---2022-04-03
参考技术ARabbitMQ的消息过期时间(TTL)下面两种方式进行设置下面使用Golang进行演示如何设置,其他开发语言类似。通过队列属性(x-message-ttl)设置消息过期时间。通过消息属性设置消息过期时间 查看详情
springboot整合rabbitmq——设置消息过期时间ttl
主要有2种方式:指定一条消息的过期时间。给队列设置消息过期时间,队列中的所有消息都有同样的过期时间。1、指定消息的过期时间@RestControllerpublicclassTTLController{@AutowiredprivateRabbitTemplaterabbitTemplate;@PostMapping("/testTTL")publicStrin... 查看详情
rabbitmq中的消息会过期吗?(代码片段)
...殊情况3.死信队列3.1死信交换机3.2死信队列3.3实践4.小结RabbitMQ中的消息长期未被消费会过期吗?用过RabbitMQ的小伙伴可能都有这样的疑问,今天松哥就来和大家捋一捋这个问题。1.默认情况首先我们来看看默认情况。默认... 查看详情
rabbitmq延迟消息
一、RabbitMQ的两个概念使用RabbitMQ来实现延迟消息必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求。 1、消息的TTL(TimeToLive)消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消... 查看详情
使用rabbitmq实现ttl机制
...消。这个怎么实现?TTL,TimetoLive的简称,即过期时间。RabbitMQ可以对消息和队列两个维度来设置TTL。任何消息中间件的容量和堆积能力都是有限的,如果有一些消息总是不被消费掉,那么需要有一种过期的机制来做兜底。目前有... 查看详情
过期消息传递序列 RabbitMQ
】过期消息传递序列RabbitMQ【英文标题】:ExpiredMessageDeliverySequenceRabbitMQ【发布时间】:2014-11-3003:20:19【问题描述】:我们正在构建一个将消息发布到超时队列的解决方案。在TTL到期后,消息被推送到主队列进行重新处理。我们... 查看详情
rabbitmq实现延时消息的两种方式
参考技术ARabbitmq实现延时消息的两种方式使用队列的ttl特性,即配置死信队列的消息重新路由到消费队列中,同一个队列的消息过期时间将相同,即使消息本身可能带上了ttl,同样会因队头的消息未过期而无法消费;定义两个队... 查看详情
rabbitmq延迟消息
一、RabbitMQ的两个概念使用RabbitMQ来实现延迟消息必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求。 1、消息的TTL(TimeToLive)消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消... 查看详情
jvm高级特性-垃圾收集之判断对象存活算法
一、概述 运行时数据区中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭的 因此,他们的内存分配和回收是确定的,在方法或线程结束时就回收。而Java堆和方 法区则是不确定的,程序运行过程中... 查看详情
rabbitmq——rabbitmq的高级特性(ttl死信队列延迟队列优先级队列rpc)
摘要本博文将介绍数据可靠性的一些细节,并展示RabbitMQ的几种已具备或衍生的高级特性,包括TTL、死信队列、延迟队列、优先级队列、RPC等,这些功能在实际使用中可以让某些应用的实现变得事半功倍。同时对源码进行详细的... 查看详情
springboot与rabbitmq上手之消息超时时间、队列消息超时时间(五)
参考技术A目的主要是学习RabbitMQ的消息超时时间、队列消息超时时间,大概会简单介绍学习为主:毕竟还是要来演示Springboot整合RabbitMQ注解的方式来使用。每条消息的过期时间不同,如果要删除所有过期消息,势必要扫描整个队... 查看详情
rabbitmq队列(代码片段)
TTL队列如果设置了消息的过期时间,也设置了队列的过期时间,它以时间短的为准。队列过期后,会将队列中所有消息全部移除。消息属性设置TTL(消息单独过期)使用参数expiration(单位:ms毫秒)... 查看详情
rabbitmq队列(代码片段)
TTL队列如果设置了消息的过期时间,也设置了队列的过期时间,它以时间短的为准。队列过期后,会将队列中所有消息全部移除。消息属性设置TTL(消息单独过期)使用参数expiration(单位:ms毫秒)... 查看详情
mq-死信队列实现消息延迟(代码片段)
...之后,延迟指定的时间才能被消费者消费。AMQP协议和RabbitMQ队列本身是不支持延迟队列功能的,但是可以通过TTL(TimeToLive)特性模拟延迟队列的功能。TTL就是消息的存活时间,RabbitMQ可以分别对队列和消息设... 查看详情
rabbitmq项目使用之死信队列(代码片段)
...际上就是设置某个队列的属性,当这个队列中有死信时,RabbitMQ就会自动的将这个消息重新发布到设置的 查看详情