认识rabbitmq死信队列

rabbitmq死信队列:当消息在队列中过期,消息就会被投放到是死信Exchange

demo地址:https://github.com/foxiaotao/springboot-rabbitmq-demo

1、消息的过期分为两种:一种方式是设置队列的TTL,该队列中所有的消息的过期时间都一样,当消息过期后,消息跟根据Queue设置的死信Exchang 和routingkey路由到某个队列

在申明队列是其参数中:

"x-dead-letter-exchange", LIND_DL_EXCHANGE)//设置该队列的死信交换机 .

"x-message-ttl", makeCallExpire:队列消息延迟时间

"x-dead-letter-routing-key", LIND_DEAD_QUEUE)//设置死信routingKey

 

2、另外一种是设置消息的过期时间:

package com.foxiaotao.springbootmq.deadletter.sendmsg;


import com.foxiaotao.springbootmq.deadletter.model.Order;
import com.foxiaotao.springbootmq.deadletter.util.JSONTools;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

@Slf4j
@Controller
@RequestMapping("test")
public class MqSender {

    @Resource(name = "orderRabbitTemplate")
    private RabbitTemplate rabbitTemplate;

    @Value("${spring.mq.exchange}")
    private String orderExchange;

    @Value("${spring.mq.routingKey}")
    private String orderRoutingKey;

    /**
     * 发送带有过期时间的消息
     */
    @GetMapping("/sendDlx")
    public void sendDlx() {
        Order order = new Order();
        order.setItemId(1);
        order.setStatus(1);
        log.info("send msg" + System.currentTimeMillis());
        rabbitTemplate.convertAndSend(orderExchange, orderRoutingKey,
                JSONTools.serialize(order), message -> {
                    message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
                    message.getMessageProperties().setExpiration("30000");
                    return message;
                });
    }

}

每条消息可以设置不用的过期时间。当消息过期后,消息重新放到exchange=LIND_DL_EXCHANGE。其LIND_DL_EXCHANGE本身可以看做普通的exchange,该怎么路由怎么路由,该怎么消费还是怎么消费

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值