300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > RabbitMQ - 死信队列(DLX)

RabbitMQ - 死信队列(DLX)

时间:2021-10-13 14:52:37

相关推荐

RabbitMQ - 死信队列(DLX)

RabbitMQ - 死信队列(DLX)

配置死信队列方式1 - RabbitMQ 管理后台配置死信队列方式2 - 代码创建死信队列验证满足死信队列的条件

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

配置死信队列

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

1、创建执行器

2、创建队列

队列的属性必须要有:

死信队列执行器

x-dead-letter-exchange

死信队列路由key

x-dead-letter-routing-key

即以下两项

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

创建死信队列

@Beanpublic 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();}@Beanpublic DirectExchange a6DeadExchange() {return new DirectExchange(RabbitMqConstant.QUEUE_TB_BANK_TRANSFER_DEAD_EXCHANGE, true, false);}@Beanpublic 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、队列达到最大长度

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。