RabbitMQ学习(3)-ttl过期时间,deadMsgQueue死信队列

一.TTL

TTL指的是Msg ttl,Message Time to live,也就是消息过期时间,在RabbitMQ中可以通过设置队列的过期时间或消息的过期时间来实现。

1.设置队列的消息过期时间

//五个参数分别为 队列名 是否持久化 是否私有化 是否自动删除 所带参数
    @Bean
    Queue ttlQueue(){
        Map args = new HashMap();
        args.put("x-message-ttl",5000);
        return new Queue("ttlQueue",true,false,false,args);
    }

通过往args中添加x-message-ttl属性来实现,同样的,也可以在RabbitMQ的网页端去设置,这里只能通过int型来设置过期时间,同时单位为ms。

设置消息过期时间的队列会有一个TTL标识。

2.设置消息的过期时间

MessagePostProcessor messagePostProcessor = new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
                message.getMessageProperties().setExpiration("5000");
                return message;
            }
        };
        rabbitTemplate.convertAndSend("fanoutExchange", "", msg,messagePostProcessor);

通过重写MessagePostProcessor中的postProcessMessage方法来实现,具体为message.getMessageProperties()后设置相关属性。

3.同时设置了消息的过期时间和消息队列的消息的过期时间

在这种情况下,会取两者中的较小值设置消息的过期时间。

二.死信队列

在设置了消息的过期的消息队列中过期的消息,如果设置了死信队列,那么消息将会被转移到对应的死信队列中。由于死信队列也属于队列,所以其转移应遵循正常的分发机制,下面是使用direct模式将过期消息转移到死信队列的案例。

//设置了消息过期时间的队列
    @Bean
    Queue ttl2Queue(){
        Map args = new HashMap();
        //指定消息过期时间
        args.put("x-message-ttl",5000);
        //指定死信队列的路由key
        args.put("x-dead-letter-routing-key", "dead");
        //指定给死信队列转发消息的交换机
        args.put("x-dead-letter-exchange", "directExchange");
        return new Queue("ttl2Queue",true,false,false,args);
    }
//direct模式的交换机
    @Bean
    DirectExchange directExchange(){
        return new DirectExchange("directExchange",true,false);
    }
//绑定死信交换机和死信队列
    @Bean
    Binding deadBinding(){
        return BindingBuilder.bind(deadMsgQueue()).to(directExchange()).with("dead");
    }

总的来说,死信队列就是一个用于存放过期消息的队列,需要一个死信交换机来转发消息,与普通的队列无异。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值