RabbitMQ:SpringAMQP 多消費者綁定同一隊列

目錄

  • 一、案例需求
  • 二、代碼實現
  • 三、總結


生產者源碼
消費者源碼

一、案例需求

模擬WorkQueue,實現一個隊列綁定多個消費者。

  1. 在RabbitMQ的控制臺創建一個隊列,命名為work.queue
  2. 在生產者服務中定義測試方法,在1s內產生50條消息,發送到work.queue
  3. 在消費這服務中定義兩個消息監聽,都監聽work.queue隊列。
  4. 消費者1每秒處理50條消息,消費者2每秒處理5條消息。

二、代碼實現

生產者

@Test
public void workQueueTest() throws InterruptedException {for (int i = 0; i < 50; i++) {String queueName = "work.queue";String message = String.format("hello %s, spring amqp!", i + 1);rabbitTemplate.convertAndSend(queueName, message);Thread.sleep(200);}}

消費者

@RabbitListener(queues = "work.queue")
public void listenWorkQueue1(String message){System.out.println(String.format("消費者1,收到了work.queue: %s", message));
}@RabbitListener(queues = "work.queue")
public void listenSimpleQueue2(String message){System.err.println(String.format("消費者2,收到了work.queue: %s", message));
}

在這里插入圖片描述

三、總結

默認情況下,RabbitMQ會將消息依次輪詢投遞給綁定在隊列上的所有消費者。但是這并沒有考慮到消費者是否已經處理完消息,可能會出現消息堆積。
因此我們需要修改application.yml,設置prefetch值為1,確保同一時刻最多投遞給消費者1條消息。

spring:rabbitmq:listener:simple:prefetch: 1
  • 多個消費者綁定到一個隊列,可以加快消費處理速度。
  • 同一個消息只會被一個消費者處理。
  • 通過設置prefetch來控制消費者預取的消息數量,處理完一條再處理下一條,實現能者多勞。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919385.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919385.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919385.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java技術總監的成長之路(技術干貨分享)

以下是針對 ?Java技術總監? 在 Linux 環境下搭建企業級開發環境的完整指南&#xff0c;涵蓋 JDK 配置、工程工具鏈、協作平臺及性能優化方案&#xff1a; 本文章僅提供學習&#xff0c;切勿將其用于不法手段&#xff01; 一、核心環境搭建 1. ?JDK 安裝與調優? ?版本選擇…

C++代碼解釋:實現一個 mystring 類,用于表示字符串,實現構造函數,默認構造長度為 10 的空間,提供打印字符串,獲取空間大小,修改內容的成員函數

題目代碼#include <cstring> // 包含字符串處理函數庫&#xff0c;如strlen、strncpy等 #include <iostream> // 包含輸入輸出流庫&#xff0c;用于cout等操作 using namespace std; // 使用標準命名空間&#xff0c;避免重復書寫std::class mystring { // 定…

如何解決IDEA/Datagrip無法連接數據庫的問題:解決方法為添加參數-Djava.net.preferIPv4Stack=true

如何解決IDEA/Datagrip無法連接數據庫的問題&#xff1a;解決方法為添加參數-Djava.net.preferIPv4Stacktrue 引言 在開發過程中&#xff0c;我們常常使用集成開發環境&#xff08;IDE&#xff09;如 IntelliJ IDEA 或 JetBrains DataGrip 來與數據庫進行交互。然而&#xff…

走進數字時代,融入數字生活,構建數字生態

一、準備在IT行業深耕十七年&#xff0c;始終專注于企業生產經營中的實際應用問題&#xff0c;歷經開發、測試、運維、實施、架構設計等多個技術崗位&#xff0c;并參與肉制品的生產與銷售業務&#xff0c;推進了企業主業的市場管理落地&#xff0c;積累了業務與信息技術融合的…

【Vue開發】在Vite+Vue3項目中實現離線Iconify圖標方案

在ViteVue3項目中實現離線Iconify圖標方案 項目背景 當前項目需要部署到無網絡連接的離線環境&#xff0c;因此需要將Iconify圖標集打包到項目構建結果中&#xff0c;實現完全離線使用。 技術環境 框架: Vue 3構建工具: Vite核心依賴:"iconify/json": "^2.2…

Kotlin 協程之Channel

前言 在之前的文章中&#xff0c;我們已經知道了協程的啟動、掛起、取消、異常以及常用的協程作用域等基礎應用。 這些基礎應用適合的場景是一次性任務&#xff0c;執行完就結束了的場景。 launch / async 適合的場景 網絡請求數據庫查詢文件讀寫并行計算任務等等 Channel …

linux系統裝google chrome,amd64

google chrome官網最下邊其他平臺&#xff0c;linux 查看自己的系統架構&#xff08;用下邊這行代碼查看&#xff09;&#xff0c;看看是amd還是 &#xff0c;我的顯示amd64&#xff0c;amd對應.deb,rpm對應x86 &#xff0c;選擇下載 dpkg --print-architecture 然后 sudo…

【C++基礎】C++ 中const與volatile關鍵字深度解析:從面試考點到底層實現

在 C 開發崗位的面試中&#xff0c;const與volatile關鍵字是高頻考點之一。這兩個關鍵字看似簡單&#xff0c;但實際上蘊含著豐富的語義和底層機制。本文從基礎語法到高級應用&#xff0c;結合大廠真題&#xff0c;深入解析這兩個關鍵字的奧秘。一、const關鍵字&#xff1a;常量…

達夢分布式集群DPC_故障分析_yxy

達夢分布式集群DPC_節點故障分析1 DPC核心概念回顧2 場景1-主庫故障3 場景2-少數備庫故障4 場景3-多數節點故障4.1 多數節點故障&#xff08;包括主庫&#xff09;4.2 多數備庫節點故障&#xff08;不包括主庫&#xff09;1 DPC核心概念回顧 達夢分布式集群DPC&#xff0c;基于…

【高并發內存池】一、簡介 定長內存池實現

文章目錄Ⅰ. 項目介紹1、這個項目要做什么2、項目的要求Ⅱ. 什么是內存池1、池化技術2、內存池3、mallocⅢ. 設計一個定長內存池1、定長內存池的概念2、實現如何實現定長???如何繞開 malloc 向堆直接申請空間???3、性能測試Ⅰ. 項目介紹 1、這個項目要做什么 tcmalloc源…

產品設計.原型設計

產品思維&#xff1a; 1. 產品定位&#xff1a;產品的具體的、用戶畫像&#xff1b; --什么樣的人在什么環境下做什么事情的場景 2. 范圍層: 發現、識別和決策需求。--識別真假需求&#xff0c;做ROI判斷 3. 可復用的、MVP產品方案--要能復用的解決方案&#xff0c;最小可用產品…

vue3+element-plus 輸入框el-input設置背景顏色和字體顏色,樣式效果等同于不可編輯的效果

應用效果&#xff1a;代碼&#xff1a;<template> ......<el-form-item label"文件編號" label-position"right"><el-input v-model"qualityFileForm.fileNo" clearable :disabled"!props.isNew" /></el-form-it…

[ CSS 前端 ] 網頁內容的修飾

目錄 一. CSS 1. 概述 2. 基本語法 (1)行內樣式表 (2)內嵌樣式表 (3)外部樣式表 3. 選擇器 (1)標簽選擇器: (2)類選擇器: (3)通配選擇器: (4)后代選擇器: 4. 基礎樣式 (1). 文本樣式 (2). 背景樣式 (3). 列表樣式 5. 偽類 (1)定義: (2)偽類的語法&#xff1a; …

全面深入了解榛樹游戲引擎

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;榛樹游戲引擎&#xff08;Hazel&#xff09;是一款專為游戲開發設計的先進軟件工具&#xff0c;它集成了多種功能&#xff0c;支持現代圖形API&#xff0c;具有高性能的物理模擬系統和易學易用的腳本語言&#…

“大模型”技術專欄 | 淺談基于 Kubernetes 的 LLM 分布式推理框架架構:概覽

編者按&#xff1a;人工智能正以前所未有的滲透力重塑生產與生活圖景。作為國內領先的數據智能科技企業&#xff0c;和鯨科技自 2015 年成立以來&#xff0c;深耕人工智能與數據科學&#xff0c;歷經十年發展&#xff0c;已在氣象、教育、醫療、航空航天、金融、通信、能源、零…

【JS】認識并實現一個chrome擴展程序

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 這篇文章主要介紹chrome擴展程序。 學其所用&#xff0c;用其所學。——梁啟超 歡迎來到我的博客&#xff0c;一起學習&#xff0c;共同進步。 喜歡的朋友可以關注一下&#xff0c;下次更新不迷路&#…

jeecgboot項目遇見的一些問題:

1.當你想修改項目的標題&#xff0c;前端將jeecgboot改成你想要的標題的時候&#xff0c;去前端的.env文件中進行修改。圖1 修改標題根據路徑找到文件&#xff0c;將網站標題改成自己需要的就可以正常顯示了。圖2 顯示前圖3 顯示后2.在動態數組中&#xff0c;如果你知道數組需要…

項目里程碑設定有哪些方法

要科學設定項目里程碑&#xff0c;可采用以下幾種方法&#xff1a;基于項目階段劃分法、關鍵交付物導向法、依賴關系鏈分析法、時間驅動法、風險節點識別法、目標成果導向法、資源約束分析法、客戶驗收節點設定法。其中&#xff0c;關鍵交付物導向法尤為實用。該方法以項目中必…

英偉達顯卡驅動怎么更新 詳細步驟教程

英偉達顯卡驅動程序對于電腦的圖形性能至關重要&#xff0c;它能確保顯卡在游戲、設計、視頻渲染等方面發揮最大性能。如果驅動過舊&#xff0c;可能會導致游戲運行不暢、軟件不兼容&#xff0c;甚至系統出現錯誤。因此&#xff0c;定期更新英偉達顯卡驅動非常必要。下面將為大…

基于單片機智能拐杖/導盲杖/老人防摔倒設計

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 該設計針對老年人及行動不便人群的需求&#xff0c;開發了一款集成單片機控制的智能拐杖。拐杖采…