这篇是 代码篇 ,略过 Direct,Fanout,Topic 这几种基本队列的使用介绍,但是 Github 仓库上可以查看到的。
图片
<( ̄︶ ̄)↗[GO!]
冲冲冲~
死信是指有这三个特点的消息
// nack 返回 false,并放弃重新回到队列channel.basicNack(deliveryTag, false, false);//拒绝,不重新入队列channel.basicReject(deliveryTag, false);
死信交换机 —— DLX:Dead-Letter-Exchange
@Beanpublic DirectExchange directExchange2() { /** * 交换机名,后面两个是默认值就:持久化,不自动删除 */ return new DirectExchange(RabbitMQConstants.DIRECT_EXCHANGE2, true, false);}@Beanpublic Queue directQueue2() { return QueueBuilder .durable(RabbitMQConstants.DIRECT_QUEUE2) .deadLetterExchange(RabbitMQConstants.DLX_EXCHANGE) .deadLetterRoutingKey(RabbitMQConstants.DLX_ROUTING_KEY) .build();}/** * 将队列绑定到交换机上 * * @return */@Beanpublic Binding directBinding2() { return BindingBuilder. bind(directQueue2()). to(directExchange2()). with(RabbitMQConstants.DIRECT_BINDING_KEY2);}
两种设置方式
同时设置的话,过期时间已短的为准
/** * 创建队列时设置 * @return */@Beanpublic Queue ttlQueue() { Map<String, Object> args = new HashMap<>(); //设置消息过期时间 args.put("x-message-ttl", 5000); //设置死信交换机 args.put("x-dead-letter-exchange", RabbitMQConstants.DLX_EXCHANGE); //设置死信 routing_key args.put("x-dead-letter-routing-key", RabbitMQConstants.DLX_ROUTING_KEY); return new Queue(RabbitMQConstants.TTL_QUEUE, true, false, false, args);}
/** * 发送消息时设置 * @return */public void sendMessage2() throws JsonProcessingException { User user = new User(); ObjectMapper objectMapper = new ObjectMapper(); byte[] bytes = objectMapper.writeValueAsBytes(user); // 10 s 后过期 Message message = MessageBuilder.withBody(bytes) .setExpiration("10000").build(); // 交换机,路由键,信息 rabbitTemplate.convertAndSend( RabbitMQConstants.DIRECT_EXCHANGE2, RabbitMQConstants.DIRECT_ROUTING_KEY2, message );}
图片
队列 5 秒延迟的效果
图片
两种方案实现
插件可以在这里找到
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-76494-0.htmlRabbitMQ代码篇之过期时间,死信队列,延迟队列,优先级队列的基本使用
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: 关于Java程序服务预热那些事