日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SpringBoot整合RabbitMQ延遲隊列&優先級隊列詳解

來源: 責編: 時間:2023-08-09 23:02:57 350觀看
導讀延遲隊列延遲隊列:簡單說就是發送出去的消息經過給定的時間后,消費者才能看見消息(消費消息)。這里簡單說下步驟:創建一個隊列,如:bs-queue, 設置死信交換機(死信交換機路由key(這是可選的))及隊列,如:dead-exchange; 消息的消費端

延遲隊列

延遲隊列:簡單說就是發送出去的消息經過給定的時間后,消費者才能看見消息(消費消息)。oQL28資訊網——每日最新資訊28at.com

這里簡單說下步驟:oQL28資訊網——每日最新資訊28at.com

  1. 創建一個隊列,如:bs-queue, 設置死信交換機(死信交換機路由key(這是可選的))及隊列,如:dead-exchange; 消息的消費端監聽該dead-queue隊列。設置消息有效期參數x-message-ttl參數(值為自己需要延遲的時間,單位:毫秒)。
  2. 發送消息發送到bs-queue上。由于消息消費端監聽的是死信隊列,所以只需要等待指定的時間后消息會自動被轉發到死信隊列上(dead-queue)。
  3. 消息的消費端監聽dead-queu隊列即可。

優先級隊列

優先級隊列是在RabbitMQ3.5.0之后的版本才支持的。oQL28資訊網——每日最新資訊28at.com

具有高優先級的隊列具有高的優先權,優先級高的消息具備優先被消費的特權。oQL28資訊網——每日最新資訊28at.com

隊列的優先級通過x-max-priority參數設置。oQL28資訊網——每日最新資訊28at.com

建立一個priority-exchange交換機,類型:direct。oQL28資訊網——每日最新資訊28at.com

圖片圖片oQL28資訊網——每日最新資訊28at.com

建立一個priority-queue隊列,并與priority-exchange綁定。oQL28資訊網——每日最新資訊28at.com

圖片圖片oQL28資訊網——每日最新資訊28at.com

設置x-max-priority參數的值為100,表示最大優先級為100。oQL28資訊網——每日最新資訊28at.com

注意:x-max-priority參數的值應該介于1到255。建議使用1到10之間的隊列。如果設置的優先級更大將使用更多的Erlang進程消耗更多的CPU資源。運行時調度也會受到影響。oQL28資訊網——每日最新資訊28at.com

接下來演示優先級隊列oQL28資訊網——每日最新資訊28at.com

我們先只發送消息,然后再把消息的消費功能打開。oQL28資訊網——每日最新資訊28at.com

發送消息接口:oQL28資訊網——每日最新資訊28at.com

@GetMapping("/sendPriority")public Object sendPriority(String msg, Integer priority) {  ms.sendPriorityQueue(msg, priority) ;  return "success" ;}public void sendPriorityQueue(String msg, Integer priority) {  logger.info("準備發送消息:{}", msg);  Message message = MessageBuilder.withBody(msg.getBytes()).setPriority(priority).build() ;  rabbitTemplate.convertAndSend("priority-exchange", "pe.msg", message) ;}

發送4條消息:oQL28資訊網——每日最新資訊28at.com

// 第一條消息msg=第一條消息&priority=2 // 第二條消息msg=第二條消息&priority=10// 第三條消息msg=第三條消息&priority=1// 第四條消息msg=第四條消息&priority=7

查看消息隊列:oQL28資訊網——每日最新資訊28at.com

圖片圖片oQL28資訊網——每日最新資訊28at.com

消息消費端:oQL28資訊網——每日最新資訊28at.com

@RabbitListener(queues = { "priority-queue" })@RabbitHandlerpublic void listenerPriority(Message message, Channel channel) {  System.out.println("接受到消息.....income");  byte[] body = message.getBody();  MessageProperties mps = message.getMessageProperties();  String content = new String(body, Charset.forName("UTF-8"));  try {    System.out.println("接受到消息來自交換機: 【" + mps.getReceivedExchange() + "】, 隊列:【" + mps.getConsumerQueue()+ "】:/n內容: " + content);    channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);  } catch (Exception e) {    e.printStackTrace();    try {      channel.basicReject(mps.getDeliveryTag(), false);    } catch (IOException e1) {      e1.printStackTrace() ;    }  }}

啟動服務oQL28資訊網——每日最新資訊28at.com

圖片圖片oQL28資訊網——每日最新資訊28at.com

根據打印出的結果,正好是我們設置優先級的順序輸出。oQL28資訊網——每日最新資訊28at.com

上面設置的消息優先級都是在指定的范圍<100,如果消息的優先級超過這個值會怎么樣呢?oQL28資訊網——每日最新資訊28at.com

發送8條消息:oQL28資訊網——每日最新資訊28at.com

// 第一條消息msg=第一條消息&priority=2 // 第二條消息msg=第二條消息&priority=10// 第三條消息msg=第三條消息&priority=1// 第四條消息msg=第四條消息&priority=7// 第五條消息msg=第五條消息&priority=101

消費消息:oQL28資訊網——每日最新資訊28at.com

圖片圖片oQL28資訊網——每日最新資訊28at.com

同樣是按照順序輸出的。oQL28資訊網——每日最新資訊28at.com


oQL28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5153-0.htmlSpringBoot整合RabbitMQ延遲隊列&amp;優先級隊列詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何使用Asp.net Core實現定時任務,輕松解決任務調度問題!

下一篇: SpringBoot3進階用法,你學會了嗎?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 正镶白旗| 莱阳市| 卫辉市| 康定县| 花莲县| 咸丰县| 长岛县| 涟水县| 靖边县| 思茅市| 西峡县| 日照市| 集贤县| 宜良县| 孝义市| 长垣县| 若尔盖县| 平陆县| 罗江县| 克拉玛依市| 松阳县| 峨眉山市| 晋江市| 阿克苏市| 辰溪县| 萨迦县| 江达县| 甘谷县| 博爱县| 本溪| 湘潭市| 扎兰屯市| 易门县| 宝山区| 荣昌县| 伊金霍洛旗| 卢湾区| 大新县| 于田县| 河北省| 图片|