RabbitMQ使用指南

    • 介紹
    • 主要特點
    • 常用插件
      • 使用RabbitMQ的插件
      • 常用插件列表
    • 應用場景
    • Kafka與RabbitMq的區別
    • 主要優缺點
    • 安裝步驟
      • 插件安裝步驟
    • 使用RabbitMq
    • Java代碼示例
    • 拓展

介紹

RabbitMQ是由Erlang語言開發的,基于AMQP(高級消息隊列協議)協議實現的開源消息代理軟件。它是一個實現了消息隊列的中間件,遵循FIFO原則,用于應用程序之間的通信。RabbitMQ服務器是用Erlang語言編寫的,而集群和故障轉移是構建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊的客戶端庫。
RabbitMQ在分布式系統開發中應用非常廣泛,可以提高系統響應速度、異步處理任務、服務解耦、消除峰值等。例如,將不需要同步處理的并且耗時長的操作由消息隊列通知消息接收方進行異步處理,提高了應用程序的響應時間。

在這里插入圖片描述

主要特點

RabbitMQ的主要特點包括:
可靠性 :RabbitMQ使用持久化、傳輸確認以及發布確認等機制來保證消息的可靠性。
靈活的路由 :在消息進入隊列之前,通過交換機來路由信息,可以實現靈活的消息分發。
擴展性 :多個RabbitMQ可以組成一個集群,也可以根據業務情況動態地擴展集群中的節點。
多語言客戶端 :RabbitMQ支持非常多的語言,如Java,Python,Ruby,PHP,C#,JavaScript等。
管理界面 :RabbitMQ提供了一個易于使用的用戶界面,使得用戶可以監控和管理消息和集群中的節點等。
插件機制 :RabbitMQ提供了許多插件,實現從多方面進行擴展,也可以編寫自己的插件。

常用插件

使用RabbitMQ的插件

要使用RabbitMQ的插件列表,您可以按照以下步驟進行操作:

  1. 訪問RabbitMQ的官方網站,并轉到“插件”頁面。您可以在該頁面上找到所有可用的插件列表。
  2. 在插件列表中,您可以查找適合您需求的插件。插件通常根據其功能進行分類,例如消息持久化、消息確認、消息路由等。
  3. 找到適合的插件后,請按照插件頁面上的說明進行安裝。通常,這包括將插件文件復制到RabbitMQ服務器上的特定位置,并執行一些配置任務。
  4. 安裝完成后,您需要重新啟動RabbitMQ服務器以使插件生效。
  5. 一旦插件安裝并啟用,您可以使用RabbitMQ的管理界面或相關工具來配置和管理該插件。具體的配置方法取決于插件的具體功能和要求。

請注意,使用RabbitMQ的插件時,您需要確保了解其工作原理和配置要求,以確保正確使用和充分發揮其作用。如果您不確定如何使用某個插件,建議參考RabbitMQ的官方文檔或尋求相關社區和論壇的幫助。

常用插件列表

RabbitMQ常用的插件有很多,比如以下幾個:

1. rabbitmq_amqp1_0 :這是一個支持AMQP 1.0協議的插件,可以讓RabbitMQ使用AMQP協議進行通信。
2. rabbitmq_delayed_message_exchange :這個插件可以設置消息的延遲時間,實現延遲消息的發送。
3. rabbitmq_federation:該插件可以實現RabbitMQ集群之間的消息聯邦,使得消息可以在不同的集群之間進行傳遞。
4. rabbitmq_sharding :這是一個分片插件,用于實現消息的分布式處理。
5. rabbitmq_shovel :這個插件可以實現消息的靜態路由,可以將消息路由到指定的隊列。
6. rabbitmq_tracing :該插件可以實現對RabbitMQ消息的跟蹤和監控。
7. rabbitmq_mqtt :這是一個MQTT插件,可以讓RabbitMQ支持MQTT協議。
8. rabbitmq_web_mqtt :這是一個基于HTTP的MQTT插件,可以讓MQTT客戶端通過HTTP協議與RabbitMQ進行通信。
9. rabbitmq_stomp :這是一個STOMP插件,可以讓RabbitMQ支持STOMP協議。
10. rabbitmq_web_stomp :這是一個基于HTTP的STOMP插件,可以讓STOMP客戶端通過HTTP協議與RabbitMQ進行通信。
11. rabbitmq_consistent_hash_exchange :這個插件可以實現一致性哈希交換,可以將消息根據key值進行路由,并發送到對應的隊列。

應用場景

RabbitMQ在以下場景中具有廣泛應用:
異步處理任務 :通過使用RabbitMQ,可以將任務異步發送到消息隊列中,由消費者異步處理,從而實現系統解耦和高并發處理。例如,訂單系統可以將訂單數據發送到消息隊列中,由庫存系統和支付系統異步處理。
消息通知 :在分布式系統中,各個模塊之間需要相互通信,例如用戶注冊、支付成功、物流狀態等。通過使用 RabbitMQ,可以將消息發送到消息隊列中,由消費者接收并處理,實現消息通知功能。
日志處理 :RabbitMQ可用于日志處理,例如日志收集、日志分析等。通過將日志消息發送到消息隊列中,可以實現日志的異步處理,同時可以通過設置消息的屬性、路由規則等來實現不同類型的日志處理。
應對大流量場景 :在商品秒殺、搶購等流量短時間內暴增場景中,為了防止后端應用被壓垮,可在前后端系統間使用 RabbitMQ 消息隊列傳遞請求。

Kafka與RabbitMq的區別

RabbitMQ和Kafka都是廣泛使用的消息隊列系統,它們在以下方面存在一些差異:

  1. 語言與開發:RabbitMQ是由Erlang語言開發的,主要用于實時且對可靠性要求較高的消息傳遞。而Kafka則是由Scala語言開發的,主要用于處理活躍的流式數據,特別是在大數據量的處理上。
  2. 架構與交互方式:RabbitMQ以broker為中心,包含Exchange、Binding和Queue等組成部分。而Kafka則以consumer為中心,無消息確認機制。在集群負載均衡方面,Kafka比RabbitMQ更具優勢。
  3. 吞吐量與持久化:RabbitMQ支持消息的可靠傳遞,支持事務,不支持批量操作,基于存儲的可靠性要求存儲可以采用內存或硬盤,吞吐量相對較小。而Kafka內部采用消息的批量處理,數據的存儲和獲取是本地磁盤順序批量操作,消息處理的效率高,吞吐量高。另外,Kafka的消息被消費后仍保存在磁盤中。
  4. 性能與擴展性:由于RabbitMQ使用AMQP協議,其性能相對較高,但擴展性相對較差。而Kafka使用Pull方式獲取消息,客戶端直接與Broker交互,使得其具有較好的擴展性。

RabbitMQ和Kafka在語言與開發、架構與交互方式、吞吐量與持久化、性能與擴展性等方面存在明顯差異。選擇使用哪個系統取決于具體的應用場景和需求。

主要優缺點

RabbitMQ是一款廣泛使用的開源消息隊列系統,它具有以下優點:

  1. 可靠性:RabbitMQ提供了高可靠性的消息傳輸,通過持久化機制和消息確認機制,保證了消息的可靠性和不丟失。
  2. 靈活性:RabbitMQ支持多種消息協議和數據格式,可以靈活地滿足不同的業務需求。
  3. 可擴展性:RabbitMQ可以輕松地進行橫向擴展,支持多個生產者和消費者,可以有效地提高系統的吞吐量和并發處理能力。
  4. 易用性:RabbitMQ具有友好的用戶界面和豐富的客戶端庫支持,可以方便地進行管理和使用。

然而,RabbitMQ也存在一些缺點:

  1. 性能開銷:引入RabbitMQ作為中間件,會增加系統的復雜度和性能開銷。
  2. 適用場景有限:RabbitMQ對于需要高吞吐量和低延遲的應用場景可能不夠適用。
  3. 消息一致性:在分布式環境中,確保消息的一致性是一個挑戰。如果處理不當,可能會導致數據不一致的問題。
  4. 故障恢復:如果RabbitMQ服務器出現故障,需要一定的時間進行故障恢復,這期間可能會對系統可用性造成影響。

安裝步驟

在Linux平臺上安裝RabbitMQ的詳細步驟如下:

  1. 打開終端,使用root用戶或者sudo權限的用戶登錄。
  2. 進入RabbitMQ的安裝包所在目錄。
  3. 執行以下命令解壓安裝包:
tar -xzf rabbitmq-server-generic-unix-3.11.0.tar.gz
  1. 進入解壓后的目錄:
cd rabbitmq_server-3.11.0
  1. 執行以下命令創建配置文件:
cp -r etc /usr/local/rabbitmq
  1. 進入RabbitMQ的安裝目錄:
cd /usr/local/rabbitmq
  1. 執行以下命令啟動RabbitMQ服務:
rabbitmq-server start
  1. RabbitMQ服務啟動后,可以運行以下命令進行測試:
rabbitmqctl status

如果看到輸出中的"running"字樣,說明安裝成功。
9. 執行以下命令關閉RabbitMQ服務:

rabbitmqctl stop
  1. 如果需要設置開機啟動,可以執行以下命令:
rabbitmq-service add /usr/local/rabbitmq/sbin/rabbitmq-server start /usr/local/rabbitmq/sbin/rabbitmqctl start /usr/local/rabbitmq/sbin/rabbitmqctl stop /usr/local/rabbitmq/sbin/rabbitmqctl restart /usr/local/rabbitmq/sbin/rabbitmqctl status /usr/local/rabbitmq/sbin/rabbitmqctl set_permissions -p / /guest:* //guest:* /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/

插件安裝步驟

RabbitMQ的插件安裝步驟如下:

  1. 找到RabbitMQ的安裝目錄,進入plugins文件夾。
  2. 將需要安裝的插件文件復制到plugins文件夾中。
  3. 打開RabbitMQ的管理界面,進入“Plugins”選項卡。
  4. 在列表中找到并選擇需要安裝的插件,點擊“Enable”按鈕。
  5. 等待插件安裝完成,安裝過程中請勿關閉窗口或斷開網絡連接。
  6. 安裝完成后,重新啟動RabbitMQ服務,使插件生效。

使用RabbitMq

RabbitMQ是一款廣泛使用的開源消息隊列系統,它支持多種消息協議和數據格式,可以靈活地滿足不同的業務需求。以下是使用RabbitMQ的基本步驟:

  1. 配置RabbitMQ服務器:首先需要在服務器上安裝RabbitMQ,并對其進行配置。可以按照默認配置進行安裝和啟動,也可以根據實際需求進行自定義配置。
  2. 創建交換器和隊列:在RabbitMQ中,消息是通過交換器和隊列進行路由的。可以根據實際需求創建不同的交換器和隊列,例如TopicExchange、DirectExchange、FanoutExchange等不同類型的交換器和Queue。
  3. 綁定交換器和隊列:創建好交換器和隊列后,需要將它們綁定在一起,以便消息可以在它們之間傳遞。可以使用Binding類來綁定交換器和隊列。
  4. 發送消息:在生產者端,可以使用RabbitMQ的Java客戶端庫或其他語言的客戶端庫來發送消息到指定的交換器和隊列。需要指定消息的routingKey和消息體。
  5. 接收消息:在消費者端,可以使用RabbitMQ的Java客戶端庫或其他語言的客戶端庫來接收消息。需要指定要監聽的隊列,并實現消息接收邏輯。
  6. 處理消息:在消費者端接收到消息后,可以對消息進行處理,例如執行業務邏輯、存儲數據等操作。處理完成后可以通過ack機制通知RabbitMQ服務器消息已經被消費。
  7. 監控和管理:可以使用RabbitMQ的管理界面來監控和管理RabbitMQ服務器和消息隊列的狀態、性能等指標。也可以通過其他工具或插件來實現更高級的管理和監控功能。

以上是使用RabbitMQ的基本步驟,需要根據實際業務場景和需求進行適當的配置和調整。同時還需要注意消息的可靠傳輸、消息的持久化和順序等問題,以及處理異常情況和性能優化等方面的注意事項。

Java代碼示例

以下是一個簡單的Java代碼示例,演示如何使用RabbitMQ發送和接收消息:

發送消息:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;public class Send {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {channel.queueDeclare(QUEUE_NAME, false, false, false, null);String message = "Hello World!";channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));System.out.println(" [x] Sent '" + message + "'");}}
}

接收消息:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;public class Recv {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] Waiting for messages. To exit press CTRL+C");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), "UTF-8");System.out.println(" [x] Received '" + message + "'");};channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });}}
}

在這個示例中,我們首先創建了一個名為“hello”的隊列,然后使用basicPublish方法將一條消息發送到該隊列中。在Recv類中,我們創建了一個名為“hello”的隊列,并使用basicConsume方法開始從隊列中接收消息。當接收到消息時,DeliverCallback回調函數將被調用,以便對消息進行處理。

拓展

RabbitMq中交換器(Exchange)類型詳解

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

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

相關文章

元宇宙紅色展廳VR虛擬展館提高受訓者的參與感

生活在和平年代的新一代青少年,可能對革命先烈英勇事跡難以有很深的體會,無法切實感受到中國共產黨無畏犧牲、誓死保家衛國的紅色精神,因此借助VR虛擬現實制作技術,讓參觀者們走近革命先烈中,感受老一輩無產階級革命家…

搜索引擎和網絡瀏覽器之間的區別

術語“搜索引擎”和“網絡瀏覽器”與互聯網有關。搜索引擎基本上是用于通過 Internet 搜索信息的工具,而 Web 瀏覽器是用于加載網頁等 HTML 文件的應用軟件。 閱讀本文以了解有關搜索引擎和網絡瀏覽器以及它們之間的區別的更多信息。 什么是搜索引擎? …

TrustZone之SMC異常

作為支持兩個安全狀態的一部分,該架構包括了Secure Monitor Call(SMC)指令。執行SMC會引發Secure Monitor Call異常,該異常目標是EL3。 通常,SMC用于請求服務,可以是來自駐留在EL3中的固件,也可…

微信小程序適配方案:rpx(responsive pixel響應式像素單位)

小程序適配單位:rpx 規定任何屏幕下寬度為750rpx 小程序會根據屏幕的寬度自動計算rpx值的大小 Iphone6下:1rpx 1物理像素 0.5css 小程序編譯后,rpx會做一次px換算,換算是以375個物理像素為基準,也就是在一個寬度…

迭代器失效及解決辦法

當使用迭代器遍歷容器并刪除元素時&#xff0c;迭代器可能會失效。 對于vector來說&#xff0c;如果使用普通迭代器&#xff08;例如std::vector<int>::iterator&#xff09;進行遍歷和刪除操作&#xff0c;當你刪除一個元素后&#xff0c;后面的元素會向前移動填補空缺…

服務器如何保證數據安全_Maizyun

服務器如何保證數據安全 在當今的數字化時代&#xff0c;數據安全已經成為企業和社會組織必須面對的重要問題。服務器作為存儲和處理大量數據的核心組件&#xff0c;必須采取有效的措施來確保數據的安全。本文將探討服務器如何保證數據安全。 一、訪問控制和身份認證 訪問控…

nvm,node,npm,yarn相關安裝報錯問題記錄

問題一&#xff1a; yarn : 無法加載文件 D:\jsPackage\nodejs\node_global\yarn.ps1&#xff0c;因為在此系統上禁止運行腳本。 解決&#xff1a; 步驟1,powerShell以管理員運行后&#xff0c;輸入命令: get-ExecutionPolicy 查看權限, 會看到它的返回值是 Restricted , 意…

計算一組x和y(一維數組)

輸入30個整數a1,a2,a3,…,a30&#xff0c;計算所有的x與y。已知&#xff1a; 輸入格式: 30個整數 輸出格式: 計算得到的x1, x2,.......,x10 計算得到的y1, y2,.......,y10 所有輸出精確到小數點后3位。 注意&#xff1a; 1、輸出的每個“”左右各有一個空格&#xff0c;輸出…

堅鵬:興業銀行EAST5.0政策解讀及數據質量提升方案培訓

興業銀行股份有限公司&#xff08;簡稱“興業銀行”&#xff09;成立于1988年8月&#xff0c;2022年總資產9.27萬億元&#xff0c;是經國務院、中國人民銀行批準成立的首批股份制商業銀行之一&#xff0c;總行設在福州市。現已發展成為橫跨境內外&#xff0c;線上線下結合&…

12.8 作業

1&#xff0c; 使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數 將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷ui界面上輸入的賬號是否為"admin"&#…

什么是git pr

“Git PR” 指的是 Git 中的 Pull Request&#xff0c;是一種協作開發的工作流程。Pull Request 提供了一種將代碼從一個分支&#xff08;通常是開發者個人的分支&#xff09;合并到另一個分支&#xff08;通常是主分支&#xff09;的機制&#xff0c;并在合并前進行代碼審查和…

FLStudio中文2024中文最新漢化安裝包下載

FLStudio中文21最新版本以其使用速度而聞名&#xff0c;是一個高度復雜的音樂制作環境。FL Studio免費&#xff0c;聯合國音序器音頻和MIDI每個復合編輯都是音樂。現代的DAW是一種非凡的野獸。首先&#xff0c;它在很大程度上把自己放在了(幾乎)每個人記錄過程的核心。其次&…

探索 SNMPv3 魔法:armbian系統安裝snmp服務并通過SNMPV3進行連接控制

文章目錄 說明SNMP服務的安裝本機連接SNMPV3操作MIB Browser連接SNMPV3問題總結密碼過短權限配置錯誤&#xff0c;導致OID不存在 說明 工具 建議嘗試專業版ireasoning MIB brower&#xff0c;因為只有專業版支持SNMP v3的連接。當然&#xff0c;也可以嘗試其他SNMP客戶端工具 …

[足式機器人]Part4 南科大高等機器人控制課 Ch03 Operator View of Rigid-Body Transformation

本文僅供學習使用 本文參考&#xff1a; B站&#xff1a;CLEAR_LAB 筆者帶更新-運動學 課程主講教師&#xff1a; Prof. Wei Zhang 南科大高等機器人控制課 Ch03 Operator View of Rigid-Body Transformation 1. Rotation Operation via Differential Equation1.1 Skew Symmetr…

Java第21章網絡通信

網絡程序設計基礎 網絡程序設計編寫的是與其他計算機進行通信的程序。Java 已經將網絡程序所需要的元素封 裝成不同的類&#xff0c;用戶只要創建這些類的對象&#xff0c;使用相應的方法&#xff0c;即使不具備有關的網絡支持&#xff0c;也可 以編寫出高質量的網絡…

kennard-stone算法實現樣本集劃分(ks算法)

目錄 一、 Kennard-Stone算法原理&#xff08;KS算法&#xff09; 二、Kennard-Stone算法作用 三、代碼 四、對選出來的train樣本使用T-SNE算法進行繪制 五、參考鏈接 一、 Kennard-Stone算法原理&#xff08;KS算法&#xff09; KS算法原理&#xff1a;把所有的樣本都看…

測試學習筆記1:@SpringbootTest測試注解詳解

SpringBootTest是一個用于在springboot應用程序中啟動完整應用的測試環境注解。它主要用于集成測試&#xff0c;可以啟動一個嵌入式的數據庫&#xff0c;加載完整的spring上下文&#xff0c;并自動裝配測試類的ApplicationContext。 以下是SpringBootTest的關鍵特性&#xff1a…

機器學習實驗四:貝葉斯分類器

系列文章目錄 機器學習實驗一&#xff1a;線性回歸機器學習實驗二&#xff1a;決策樹模型機器學習實驗三&#xff1a;支持向量機模型機器學習實驗四&#xff1a;貝葉斯分類器機器學習實驗五&#xff1a;集成學習機器學習實驗六&#xff1a;聚類 文章目錄 系列文章目錄一、實驗…

47.0/超鏈接的使用(詳細版)

目錄 47.1 創建超鏈接的基本語法 47.2 路徑 47.2.1 絕對路徑 47.2.2 相對路徑 47.2.3 相對路徑和絕對路徑舉例 47.3 內部超鏈接的建立 47.4 外部超鏈接的建立 47.5 書簽鏈接 47.6 target 屬性 HTML 文件中最重要的應用之一就是超鏈接。正因為有了超鏈接,互聯網 上的各種資源才…

自動抓取App數據

隨著移動互聯網的快速發展&#xff0c;App已經成為我們日常生活中必不可少的一部分。而App數據的抓取和分析對于開發者、運營者以及市場研究人員來說變得越來越重要。今天&#xff0c;我們要為大家介紹一種神奇的方法——自動抓取App數據&#xff0c;讓你的數據分析更加高效&am…