這篇是 代碼篇 ,略過 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 秒延遲的效果
圖片
兩種方案實現
插件可以在這里找到
本文鏈接:http://www.www897cc.com/showinfo-26-76494-0.htmlRabbitMQ代碼篇之過期時間,死信隊列,延遲隊列,優先級隊列的基本使用
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 關于Java程序服務預熱那些事