日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ(五)死信队列和延迟队列

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ(五)死信队列和延迟队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1 概念

先從概念解釋上搞清楚這個定義,死信,顧名思義就是無法被消費的消息,字面意思可以這樣理解,一般來說,producer 將消息投遞到 broker 或者直接到 queue 里了,consumer 從 queue 取出消息進行消費,但某些時候由于特定的原因導致 queue 中的某些消息無法被消費,這樣的消息如果沒有后續的處理,就變成了死信,有死信自然就有了死信隊列。

應用場景:為了保證訂單業務的消息數據不丟失,需要使用到 RabbitMQ 的死信隊列機制,當消息消費發生異常時,將消息投入死信隊列中.還有比如說: 用戶在商城下單成功并點擊去支付后在指定時間未支付時自動失效。

1.2 死信的來源

  • 消息 TTL 過期

  • 隊列達到最大長度(隊列滿了,無法再添加數據到 mq 中)

  • 消息被拒絕(basic.reject 或 basic.nack)并且 requeue=false

1.3 死信實戰

1.3.1 代碼架構圖

1.3.2 ttl過期

生產者代碼

public class Producer {private static final String NORMAL_EXCHANGE = "normal_exchange"; ?public static void main(String[] argv) throws Exception {try (Channel channel = RabbitMqUtils.getChannel()) {channel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);//設置消息的 TTL 時間AMQP.BasicProperties properties = newAMQP.BasicProperties().builder().expiration("10000").build();for (int i = 1; i < 11; i++) {String message = "info" + i;channel.basicPublish(NORMAL_EXCHANGE, "zhangsan", properties,message.getBytes());System.out.println("生產者發送消息:" + message);}}} }

消費者代碼

public class Consumer01 {//普通交換機名稱private static final String NORMAL_EXCHANGE = "normal_exchange";//死信交換機名稱private static final String DEAD_EXCHANGE = "dead_exchange"; ?public static void main(String[] argv) throws Exception {Channel channel = RabbitMqUtils.getChannel();//聲明死信和普通交換機 類型為 directchannel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);channel.exchangeDeclare(DEAD_EXCHANGE, BuiltinExchangeType.DIRECT);//聲明死信隊列String deadQueue = "dead-queue";channel.queueDeclare(deadQueue, false, false, false, null);//死信隊列綁定死信交換機與 routingkeychannel.queueBind(deadQueue, DEAD_EXCHANGE, "lisi");//正常隊列綁定死信隊列信息Map<String, Object> params = new HashMap<>();//正常隊列設置死信交換機 參數 key 是固定值params.put("x-dead-letter-exchange", DEAD_EXCHANGE);//正常隊列設置死信 routing-key 參數 key 是固定值params.put("x-dead-letter-routing-key", "lisi"); ?String normalQueue = "normal-queue";channel.queueDeclare(normalQueue, false, false, false, params);channel.queueBind(normalQueue, NORMAL_EXCHANGE, "zhangsan");System.out.println("等待接收消息.....");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);System.out.println("Consumer01 接收到消息" + message);};channel.basicConsume(normalQueue, true, deliverCallback, consumerTag -> {});} }

死信消費者

public class Consumer02 {private static final String DEAD_EXCHANGE = "dead_exchange"; ?public static void main(String[] argv) throws Exception {Channel channel = RabbitMqUtils.getChannel();channel.exchangeDeclare(DEAD_EXCHANGE, BuiltinExchangeType.DIRECT);String deadQueue = "dead-queue";channel.queueDeclare(deadQueue, false, false, false, null);channel.queueBind(deadQueue, DEAD_EXCHANGE, "lisi");System.out.println("等待接收死信隊列消息.....");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);System.out.println("Consumer02 接收死信隊列的消息" + message);};channel.basicConsume(deadQueue, true, deliverCallback, consumerTag -> {});} }

1.3.3 隊列達到最大長度

1)生產者發送消息去掉ttl屬性

2)普通消費者增加如下屬性

params.put("x-max-length",6);

此時我們發送10條,就會有4條消息被發送到死信隊列。

重啟Consumer01,另外6條也會被消費。

1.3.4 消息被拒

public class Consumer03 {//普通交換機名稱private static final String NORMAL_EXCHANGE = "normal_exchange";//死信交換機名稱private static final String DEAD_EXCHANGE = "dead_exchange"; ?public static void main(String[] argv) throws Exception {Channel channel = RabbitMqUtils.getChannel();//聲明死信和普通交換機 類型為 directchannel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);channel.exchangeDeclare(DEAD_EXCHANGE, BuiltinExchangeType.DIRECT);//聲明死信隊列String deadQueue = "dead-queue";channel.queueDeclare(deadQueue, false, false, false, null);//死信隊列綁定死信交換機與 routingkeychannel.queueBind(deadQueue, DEAD_EXCHANGE, "lisi");//正常隊列綁定死信隊列信息Map<String, Object> params = new HashMap<>();//正常隊列設置死信交換機 參數 key 是固定值params.put("x-dead-letter-exchange", DEAD_EXCHANGE);//正常隊列設置死信 routing-key 參數 key 是固定值params.put("x-dead-letter-routing-key", "lisi");String normalQueue = "normal-queue";channel.queueDeclare(normalQueue, false, false, false, params);channel.queueBind(normalQueue, NORMAL_EXCHANGE, "zhangsan");System.out.println("等待接收消息.....");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);if (message.equals("info5")) {System.out.println("Consumer01 接收到消息" + message + "并拒絕簽收該消息");//requeue 設置為 false 代表拒絕重新入隊 該隊列如果配置了死信交換機將發送到死信隊列中channel.basicReject(delivery.getEnvelope().getDeliveryTag(), false);} else {System.out.println("Consumer01 接收到消息" + message);channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}};boolean autoAck = false;channel.basicConsume(normalQueue, autoAck, deliverCallback, consumerTag -> {});} }

2. 延遲隊列

2.1概念

延時隊列,隊列內部是有序的,最重要的特性就體現在它的延時屬性上,延時隊列中的元素是希望在指定時間到了以后或之前取出和處理,簡單來說,延時隊列就是用來存放需要在指定時間被處理的元素的隊列。

2.2 使用場景

1.訂單在十分鐘之內未支付則自動取消。

2.新創建的店鋪,如果在十天內都沒有上傳過商品,則自動發送消息提醒。

3.用戶注冊成功后,如果三天內沒有登陸則進行短信提醒。

4.用戶發起退款,如果三天內沒有得到處理則通知相關運營人員。

5.預定會議后,需要在預定的時間點前十分鐘通知各個與會人員參加會議。

總結

以上是生活随笔為你收集整理的RabbitMQ(五)死信队列和延迟队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰c | 久精品在线观看 | 欧美呦交 | 国产视频自拍一区 | 久久久久国产精品一区二区 | 欧美第一页在线观看 | 好看的中文字幕电影 | 久久久久一区二区精码av少妇 | 精品国产免费一区二区三区 | 国产乱女淫av麻豆国产 | 成人福利一区 | 免费午夜视频 | 一区二区三区国产视频 | 国产又粗又黄又爽又硬的视频 | 久久性| 成人无码www在线看免费 | 亚洲国产成人精品激情在线 | 你懂的在线播放 | japanese24hdxxxx中文字幕 | 无码人妻一区二区三区免费n鬼沢 | 丰满人妻中伦妇伦精品app | 特黄特色大片免费 | 91刺激视频| 韩日视频| 曰韩一级片 | 国语对白做受欧美 | 无码免费一区二区三区免费播放 | 久久精品99国产精 | 亚洲精品在线中文字幕 | 精品一区二区久久 | a v视频在线观看 | 欧美日韩精品久久久 | 国产成人无码一区二区在线观看 | 新天堂av | 久色99 | 女同中文字幕 | 成人性生交大片 | 91日韩在线视频 | 国产免费片 | 催眠调教艳妇成肉便小说 | 国产精品美女一区 | 成人宗合网 | 国产精品一二 | 无码无套少妇毛多18pxxxx | 亚洲狼人综合网 | 大地资源二中文在线影视免费观看 | 国产精品成人免费精品自在线观看 | 婷婷色中文网 | 无码人妻精品一区二区三区99v | 黄色大片免费观看 | 人人干人人模 | 57pao国产成永久免费视频 | 99热热| 丝袜高跟av | 欧美午夜精品一区 | 欧美精品午夜 | 精品三区视频 | 91黄色视屏 | 国产精品成人久久久久 | 黄色变态网站 | 成人黄色在线观看视频 | av最新资源| 欧美日韩激情一区二区 | 乱中年女人伦 | 天天干一干 | 中文字幕人成乱码熟女香港 | 国产亚洲精品自拍 | av影视网 | 自拍毛片| 欧美熟妇精品久久久久久 | 日产毛片 | 男人操女人的免费视频 | 人人爱人人看 | 国产欧美高清 | 国产av成人一区二区三区高清 | 中国黄色免费 | 欧美一区二区性久久久 | 成人国产精品 | 91大片免费看 | 欧美亚州国产 | 色香蕉在线视频 | 色屁屁网站 | 亚洲三级在线免费观看 | 影音先锋蜜桃 | 午夜在线观看av | 欧美老女人性生活视频 | 夫妻性生活自拍 | 人妻饥渴偷公乱中文字幕 | 免费精品| 国产视频一区二区三区四区 | 久久精品资源 | 久久久久999| 熟妇人妻无乱码中文字幕真矢织江 | 浮力影院国产第一页 | 黄色片视频在线观看 | 免费成人深夜夜行p站 | 亚洲一区精品视频 | 亚洲蜜桃精久久久久久久久久久久 | 99在线无码精品入口 |