RabbitMQ - 死信队列(DLX)

死信队列只是一个概念,本质就是普通的队列。给这个普通的队列指定一个用于处理满足死信条件消息的执行器和队列即可。

配置死信队列

方式1 - RabbitMQ 管理后台配置死信队列

1、创建执行器
在这里插入图片描述

2、创建队列
队列的属性必须要有:
死信队列执行器

x-dead-letter-exchange

死信队列路由key

x-dead-letter-routing-key

即以下两项
请添加图片描述

方式2 - 代码创建死信队列

创建死信队列

@Bean
public org.springframework.amqp.core.Queue a6DeadQueue(){
    return QueueBuilder.durable(RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_DEAD_INFORMATION)
            .ttl(60000)
            .deadLetterExchange(RabbitMqConstant.EXCHANGE_DIRECT)
            .deadLetterRoutingKey(RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_INFORMATION_ROUTING_KEY).build();
}

@Bean
public DirectExchange a6DeadExchange() {
    return new DirectExchange(RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_DEAD_EXCHANGE, true, false);
}

@Bean
public Binding a6DeadBinding(org.springframework.amqp.core.Queue a6DeadQueue,DirectExchange a6DeadExchange) {
    return BindingBuilder.bind(a6DeadQueue).to(a6DeadExchange).with(RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_DEAD_ROUTING_KEY);
}

消费者监听

@RabbitListener(bindings = {
    @QueueBinding(
        exchange = @Exchange(value = RabbitMqConstant.EXCHANGE_DIRECT, durable = "true"),
        value = @Queue(
            value = RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_INFORMATION, durable = "true",
            arguments = {
                @Argument(
                    name = "x-dead-letter-exchange",
                    value = RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_DEAD_EXCHANGE
                ),
                @Argument(
                    name = "x-dead-letter-routing-key",
                    value = RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_DEAD_ROUTING_KEY
                )
            }
        ),
        key = RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_INFORMATION_ROUTING_KEY
    )
})
public void consumeCustomProfile(@Payload TbBankTransferInformationMessage tbBankTransferInformationMessage, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag, Channel channel) {
}

验证

管理后台可见队列配置
请添加图片描述

满足死信队列的条件

1、消息被拒绝

channel.basicAck(deliveryTag, false);

channel.basicReject(deliveryTag, false);

并且

requeue = false

2、消息TTL

3、队列达到最大长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值