RabbitMQ快速入門(簡單收發消息)

文章目錄

  • 前言
  • 一、數據隔離
    • 1.用戶管理
    • 2.virtual host
  • 二、控制臺收發
    • 1.交換機
    • 2.隊列
    • 3.綁定
  • 三、編程式收發
    • 1.依賴和配置
    • 2.收發信息
  • 總結


前言

1.了解數據隔離
2.RabbitMQ控制臺收發信息
3.SpringBoot整合RabbitMQ收發信息


一、數據隔離

1.用戶管理

點擊Admin選項卡,首先會看到RabbitMQ控制臺的用戶管理界面

在這里插入圖片描述
這里的用戶都是RabbitMQ的管理或運維人員。仔細觀察用戶表格中的字段,如下:

  • Name:itheima,也就是用戶名
  • Tags:administrator,說明itheima用戶是超級管理員,擁有所有權限
  • Can access virtual host: /,可以訪問的virtual host,這里的/是默認的virtual host

對于小型企業而言,出于成本考慮,我們通常只會搭建一套MQ集群,公司內的多個不同項目同時使用。這個時候為了避免互相干擾, 我們會利用virtual host的隔離特性,將不同項目隔離。一般會做兩件事情:

  • 給每個項目創建獨立的運維賬號,將管理權限分離。
  • 給每個項目創建不同的virtual host,將每個項目的數據隔離。 比如,我們給自己項目創建一個新的用戶,命名為dragon,權限為admin

在這里插入圖片描述

2.virtual host

創建完用戶,你會發現你的用戶是這樣:
在這里插入圖片描述
別急,需要授權,為你創建的用戶綁定管理的虛擬機。登錄你剛才創建的用戶。
在這里插入圖片描述
/代表默認虛擬機,我們可以給自己的項目創建一個單獨的virtual host,而不是使用默認的/。

在這里插入圖片描述
由于我們是登錄dragon賬戶后創建的virtual host,因此回到users菜單,你會發現當前用戶已經具備了對/dragon這個virtual host的訪問權限了
在這里插入圖片描述
如果你以前在默認的用戶或者你創建的其他用戶創建了隊列,交換機,你可以看到全部沒有,這就是隔離效果,互不干擾。就在當前用戶當前綁定授權的虛擬機操作。

二、控制臺收發

如果RabbitMQ安裝有問題,可以看我文章Docker中的快速安裝RaabbitMQ

1.交換機

點擊Exchanges選項卡,可以看出很多交換機

在這里插入圖片描述

我們點擊任意交換機,即可進入交換機詳情頁面。仍然會利用控制臺中的publish message 發送一條消息:

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

這里是由控制臺模擬了生產者發送的消息(這里的生產者就是交換機),可以看到拒絕了,這樣說明交換機沒有存儲消息的能力,由于沒有消費者存在,最終消息丟失了。交換機只負責路由分發消息,所以我們創建隊列,也就是消費者來處理接收消息,讓交換機(生產者)有分發消息的對象。

2.隊列

我們打開Queues選項卡,新建一個隊列:hello.queue1、hello.queue2

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

此時,我們再次向amq.fanout交換機發送一條消息。會發現消息依然沒有到達隊列!!
怎么回事呢?
發送到交換機的消息,只會路由到與其綁定的隊列,因此僅僅創建隊列是不夠的,我們還需要將其與交換機綁定。

3.綁定

點擊Exchanges選項卡,點擊amq.fanout交換機,進入交換機詳情頁,然后點擊Bindings菜單,在表單中填寫要綁定的隊列名稱

在這里插入圖片描述

再次進入綁定隊列的交換機內發送信息,回到Queues頁面,可以發現hello.queue中已經有一條消息了

在這里插入圖片描述

點擊隊列名稱,進入詳情頁,查看隊列詳情,這次我們點擊get message,可以看到信息了

在這里插入圖片描述
在這里插入圖片描述

三、編程式收發

  • 將來我們開發業務功能的時候,肯定不會在控制臺收發消息,而是應該基于編程的方式。由于RabbitMQ采用了AMQP協議,因此它具備跨語言的特性。任何語言只要遵循AMQP協議收發消息,都可以與RabbitMQ交互。并且RabbitMQ官方也提供了各種不同語言的客戶端。但是,RabbitMQ官方提供的Java客戶端編碼相對復雜,一般生產環境下我們更多會結合Spring來使用。而Spring的官方剛好基于RabbitMQ提供了這樣一套消息收發的模板工具:SpringAMQP。并且還基于SpringBoot對其實現了自動裝配,使用起來非常方便。
  • SpringAMQP提供了三個功能:
    • 自動聲明隊列、交換機及其綁定關系
    • 基于注解的監聽器模式,異步接收消息
    • 封裝了RabbitTemplate工具,用于發送消息

1.依賴和配置

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--AMQP依賴,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--單元測試--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>
spring:rabbitmq:host: 192.168.198.148 # 你的虛擬機IPport: 5673 # 端口virtual-host: /dragon # 虛擬主機username: dragon # 用戶名password: 123 # 密碼

2.收發信息

這里是創建兩個springboot項目,在途中pom.xml文件粘貼依賴,在這兩個項目內的application.yaml粘貼配置。并且我在控制臺也已經手動創建simple.queue隊列。

在這里插入圖片描述
在這里插入圖片描述

接收消息:
隨便創建個類寫如下代碼

@Component
public class SpringRabbitListener {// 利用RabbitListener來聲明要監聽的隊列信息// 將來一旦監聽的隊列中有了消息,就會推送給當前服務,調用當前方法,處理消息。// 可以看到方法體中接收的就是消息體的內容@RabbitListener(queues = "simple.queue")//隊列名public void listenSimpleQueueMessage(String msg) throws InterruptedException {System.out.println("spring 消費者接收到消息:【" + msg + "】");}
}

發送消息:
在publisher項目的測試類里寫如下代碼

@SpringBootTest
public class SpringAmqpTest {@Resourceprivate RabbitTemplate rabbitTemplate;@Testpublic void testSimpleQueue() {// 隊列名稱String queueName = "simple.queue";// 消息String message = "hello, spring amqp!";// 發送消息rabbitTemplate.convertAndSend(queueName, message);}
}

先運行consumer項目的啟動類,再運行測試類發送信息,就可以看到在consumer項目控制臺接收信息了。


總結

以上就是簡單的消息收發,具體的編程化創建虛擬機,隊列以及收發信息,我會在講解交換機的文章中講解。

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

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

相關文章

mmdet全教程

官方給的文檔一言難盡&#xff0c;網上的教程又沒有從大綱到源碼的完整解讀&#xff0c;計劃年后開個系列記錄一下

依賴庫:Ceres-solver-2.0.0安裝

依賴庫&#xff1a;Ceres-solver-2.0.0安裝 前言安裝ceres-solver-2.0.0驗證 前言 Ceres Solver是谷歌開源的C非線性優化庫&#xff0c;能夠解決有約束或無約束條件下的非線性最小二乘問題。2010年之后大量的運用在谷歌的產品開發中&#xff0c;尤其在谷歌開源的cartographer中…

圖像分類單張圖片預測準確率達到百分之百

在圖像分類任務中&#xff0c;針對單個圖片得到100%的準確率是有可能但極其罕見的&#xff0c;并且不代表模型在整個測試集上也能達到100%的準確率。 ??針對單個圖片獲得100%準確率的情況可能包括以下幾種情形&#xff1a; 圖片本身特殊性: 如果測試集中的某張圖片在訓練集中…

【python基礎(1)】變量和簡單數據類型

文章目錄 一. 變量的命名和使用二. 字符串1. 修改字符串的大小寫2. 在字符串中使用變量3. 使用制表符或換行符來添加空白4. 刪除空白 三. 數1. 整數2. 浮點數3. 整數和浮點數4. 數中的下劃線5. 同時給多個變量賦值6. 常量 三. 注釋四. Python之禪 一. 變量的命名和使用 變量規…

各種LLM數據集包括SFT數據集

各種LLM數據集包括SFT數據集 數集介紹和 hf上的名字對話數據生成方法交通領域數據集SFT 的解釋數集介紹和 hf上的名字 通用預訓練數據集 SFT datasets SFT 數據集 50萬條中文ChatGPT指令Belle數據集:BelleGroup/train_0.5M_CN 100萬條中文ChatGPT指令Belle數據集:BelleGrou…

C++學習 --stack

目錄 1&#xff0c; 什么是stack 2&#xff0c; 創建stack 2-1&#xff0c; 標準數據類型 2-2&#xff0c; 自定義數據類型 2-3&#xff0c; 其他創建方式 3&#xff0c; 操作stack 3-1&#xff0c; 賦值 3-2&#xff0c; 插入元素(push) 3-3&#xff0c; 查詢元素 3…

Linux的簡單使用

Linux命令使用技巧 Tab鍵自動補全連續兩次Tab鍵&#xff0c;給出操作提示使用上下箭頭快速調出曾經使用過的命令使用clear命令或者Ctrll快捷鍵實現清屏Linux的常用命令 命令作用詳細說明ls [-al] [dir]顯示指定目錄下的內容 -a 顯示所有文件及目錄 (. 開頭的隱藏文件也會列出) …

sonar對webgoat進行靜態掃描

安裝sonar并配置 docker安裝sonarqube&#xff0c;sonarQube靜態代碼掃描 - Joson6350 - 博客園 (cnblogs.com) 對webgoat進行sonar掃描 掃描結果 bugs Change this condition so that it does not always evaluate to "false" 意思是這里的else if語句不會執行…

“我,24歲,年薪20萬”:選對了行業究竟多重要?

那些在職場上順風順水&#xff0c;按部就班拿到高薪的人都有什么特點&#xff1f; 今天的主人公Flee告訴我&#xff0c;是穩。 在她的故事里&#xff0c;我看到一個“別人家的姑娘”&#xff0c;是怎樣在職場上穩步晉升&#xff0c;大學畢業僅2年&#xff0c;就拿到18.6K月薪&a…

「go查漏補缺」命名規則以及 GROM 結構體的應用

概述&#xff1a; 在學習GORM過程中&#xff0c;總是在調用結構體和文件導入這里出錯&#xff0c;所以整理了以下文檔用于梳理變量/結構體命名規則和import導入的知識點 一、變量/結構體命名規則 變量/結構體都遵守同樣的命名規則&#xff1a;可見性由首字母大小寫決定 大寫…

單一職責原則 (Single Responsibility Principle)

定義&#xff1a; 單一職責原則指一個類應該僅有一個引起它變化的原因。這個原則強調一個類應該只負責一個功能領域中的相應職責&#xff0c;或者可以理解為一個類應該只有一個改變的原因。 解決的問題&#xff1a; 降低類的復雜度&#xff0c;一個類只負責一項任務會更加清…

2022年12月 Scratch(二級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Scratch等級考試(1~4級)全部真題?點這里 一、單選題(共25題,每題2分,共50分) 第1題 一個骰子,從3個不同角度看過去的點數如圖所示,請問5的對面是什么點數?(?) A:1 B:3 C:4 D:6 答案:A 根據圖三,用右手定則,大拇指朝上指向6所對的方向,其余四指握起來…

目標檢測框存在內嵌情況分析與解決

這里寫目錄標題 問題描述原因分析與解決方法&#xff1a;后續及思考參考文檔 問題描述 目標檢測模型輸出的檢測框存在內嵌情況。 原因分析與解決方法&#xff1a; 根據經驗&#xff0c;第一感覺是后處理nms部分出了問題。來看下對應的代碼&#xff1a; static float CalcIou…

通過對比 入庫申請->入庫審核流程 與 直接入庫 代碼實現,解決前者誤修改stock_info表is_in=1或2數據的bug

入庫申請->入庫審核流程&#xff1a; 提交按鍵定義位置&#xff1a;src\views\purchase\rurchase\RurchaseAdd.vue <a-button click"handleSubmit" type"primary" :loading"loading">確認物品已入庫</a-button> <template&…

二、類與對象(二)

8 this指針 8.1 this指針的引入 我們先來定義一個日期的類Date&#xff1a; #include <iostream> using namespace std; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year <&l…

Python BDD之Behave測試報告

behave 本身的測試報告 behave 本身提供了四種報告格式&#xff1a; pretty&#xff1a;這是默認的報告格式&#xff0c;提供顏色化的文本輸出&#xff0c;每個測試步驟的結果都會詳細列出。plain&#xff1a;這也是一種文本格式的報告&#xff0c;但沒有顏色&#xff0c;并且…

電動汽車充放電V2G模型MATLAB代碼

微?關注“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 主要內容&#xff1a; 本程序主要建立電動汽車充放電V2G模型&#xff0c;采用粒子群算法&#xff0c;在保證電動汽車用戶出行需求的前提下&#xff0c;為了使工作區域電動汽車盡可能多的消納供給商場基礎負荷…

【辦公常識】寫好的代碼如何上傳?使用svn commit

首先找到對應的目錄 找到文件之后點擊SVN Commit

五大資源之Service(可以固定IP)

Service可以看作是一組同類Pod對外訪問接口,借助Service應用可以方便的實現服務發現與負載均衡 創建集群內部可以訪問Service #暴露Service(也創建在了namespace dev下) [root@master ~]# kubectl expose deployment(pod控制器) nginx --name=svc-nginx1 --type=Cluste…

基于原子軌道搜索算法優化概率神經網絡PNN的分類預測 - 附代碼

基于原子軌道搜索算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于原子軌道搜索算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于原子軌道搜索優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xf…