基于RabbitMQ的異步消息傳遞:發送與消費

引言

RabbitMQ是一個流行的開源消息代理,用于在分布式系統中實現異步消息傳遞。它基于Erlang語言編寫,具有高可用性和可伸縮性。在本文中,我們將探討如何在Python中使用RabbitMQ進行消息發送和消費。

安裝RabbitMQ

在 Ubuntu 上安裝 RabbitMQ 可以通過多種方式完成,包括使用包管理器、Docker 容器或從源代碼編譯。以下是最簡單和最常見的方法,使用包管理器進行安裝。

安裝 Erlang:
添加 PPA 之后,可以安裝 Erlang。

sudo apt install erlang

安裝 RabbitMQ:
在 Erlang 安裝完成后,可以安裝 RabbitMQ。

sudo apt install rabbitmq-server

啟動 RabbitMQ:
安裝完成后,可以啟動 RabbitMQ 服務。

sudo systemctl start rabbitmq-server

設置 RabbitMQ 用戶:
為了安全起見,應該創建一個 RabbitMQ 用戶。

sudo rabbitmqctl add_user your_username your_password
sudo rabbitmqctl set_permissions -p / your_username ".*" ".*" ".*"
sudo rabbitmqctl set_user_tags your_username administrator
sudo rabbitmqctl set_permissions -p / your_username ".*" ".*" ".*"

在這里,your_username 是想要創建的用戶名,your_password 是該用戶的密碼。

檢查 RabbitMQ 狀態:
使用以下命令檢查 RabbitMQ 服務狀態。

sudo systemctl status rabbitmq-server

配置 RabbitMQ 防火墻:
根據您的網絡配置,可能需要配置防火墻規則以允許外部客戶端訪問 RabbitMQ。

sudo ufw allow from any to any port 5672 proto tcp
sudo ufw allow from any to any port 15672 proto tcp

停止 RabbitMQ:
如果想要停止 RabbitMQ 服務,可以使用以下命令。

sudo systemctl stop rabbitmq-server

查看 RabbitMQ 版本:
使用以下命令查看已安裝的 RabbitMQ 版本。

sudo rabbitmq-server -v

image.png

安裝完成后,可以通過訪問 http://localhost:15672 來訪問 RabbitMQ 管理界面。如果已經設置了用戶,將需要使用創建的用戶名和密碼登錄。請注意,RabbitMQ 服務器配置和安全性是復雜的主題,上述步驟提供了基本的安裝和配置指南。根據具體需求,可能需要進行更詳細的配置。

安裝pika

pika 是一個用于 RabbitMQ 的 Python 客戶端庫,它允許創建和控制 RabbitMQ 隊列、交換器、綁定和消息。安裝也非常簡單,安裝完成后,就可以在 Python 代碼中導入 pika 庫并使用它來與 RabbitMQ 交互。

pip install pika

發送消息

首先,來看一下如何發送消息到RabbitMQ隊列。以下代碼片段展示了如何連接到RabbitMQ服務器,聲明一個隊列,并發布一個消息到該隊列。

#!/usr/bin/env python
import pikaparams = pika.ConnectionParameters(host='localhost', heartbeat=3600, blocked_connection_timeout=300)
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
  1. 創建一個ConnectionParameters實例,定義了與RabbitMQ服務器建立連接所需的參數:
    • host='localhost':指定RabbitMQ服務器的主機名,這里是本地主機。
    • heartbeat=3600:心跳間隔,單位為秒,用于保持連接的活躍性。
    • blocked_connection_timeout=300:如果連接被阻塞,這個參數定義了連接超時的時間,單位為秒。
  2. connection = pika.BlockingConnection(...):使用pika.BlockingConnection創建一個到RabbitMQ的阻塞連接。這意味著連接操作會等待直到成功建立連接。
  3. channel = connection.channel():創建一個新的通信信道。在RabbitMQ中,信道是進行消息傳遞的通道。
  4. channel.queue_declare(queue='hello'):聲明一個名為hello的隊列。如果該隊列不存在,RabbitMQ會創建它。
  5. channel.basic_publish(exchange='', routing_key='hello', body='Hello World!'):發布(發送)一條消息到隊列。參數說明:
    • exchange:交換機名稱,這里為空字符串,表示使用默認的交換機。
    • routing_key:路由鍵,這里與隊列名相同,表示消息將直接發送到hello隊列。
    • body:消息體,這里是字符串'Hello World!'

image.png

消費消息

接下來,看一下如何從RabbitMQ隊列中消費消息。以下代碼片段展示了如何連接到RabbitMQ服務器,聲明一個隊列,并使用回調函數來處理收到的消息。

#!/usr/bin/env python
import pika, sys, osdef main():connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel()channel.queue_declare(queue='hello')def callback(ch, method, properties, body):print(" [x] Received %r" % body)channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)print(' [*] Waiting for messages. To exit press CTRL+C')channel.start_consuming()if __name__ == '__main__':try:main()except KeyboardInterrupt:print('Interrupted')try:sys.exit(0)except SystemExit:os._exit(0)
  1. 定義一個名為callback的函數,它將作為消費消息時的回調函數。當消息到達時,這個函數會被調用,并打印出消息體。
  2. channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True):開始消費hello隊列中的消息。on_message_callback參數指定了當消息到達時調用的回調函數,auto_ack=True表示自動確認消息。

image.png

結論

本文介紹了如何在 Python 中使用 RabbitMQ 進行消息發送和消費。RabbitMQ 是異步消息傳遞的強有力工具,適用于構建可靠、可伸縮的分布式系統。隨著微服務架構的流行,RabbitMQ 在現代軟件開發中的作用越來越重要。

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

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

相關文章

提升寫作效率:探索AI在現代辦公自動化中的應用

工欲善其事,必先利其器。 隨著AI技術與各個行業或細分場景的深度融合,日常工作可使用的AI工具呈現出井噴式發展的趨勢,AI工具的類別也從最初的AI文本生成、AI繪畫工具,逐漸擴展到AI思維導圖工具、AI流程圖工具、AI生成PPT工具、AI…

精通SQL Server端口管理:添加與刪除監聽端口的指南

引言 SQL Server的端口管理是數據庫管理員(DBA)必須掌握的關鍵技能之一。端口配置不僅關系到數據庫的網絡通信能力,還直接影響到數據庫的安全性和性能。本文將詳細介紹如何在SQL Server中添加和刪除監聽端口,以及相關的配置策略和最佳實踐。 SQL Serve…

ubuntu 系統中 使用docker 制作 Windows 系統,從此告別 vmware虛擬機

我的系統是 ubuntu 24 前期準備工作: 安裝dockerdocker pull 或者 手動制作鏡像 docker build 的話 必須要 科學上網, 好像阿里鏡像都下不下來。需要 知道 docker 和docker compose 命令的使用方式 我是給docker 掛了 http代理 如果你能pull下來鏡像 …

springboot健身房管理系統-計算機畢業設計源碼031807

摘 要 大數據時代下,數據呈爆炸式地增長。為了迎合信息化時代的潮流和信息化安全的要求,利用互聯網服務于其他行業,促進生產,已經是成為一種勢不可擋的趨勢。在健身房管理的要求下,開發一款整體式結構的健身房管理系統…

Windows環境使用SpringBoot整合Minio平替OSS

目錄 配置Minio環境 一、下載minio.exe mc.exe 二、設置用戶名和密碼 用管理員模式打開cmd 三、啟動Minio服務器 四、訪問WebUI給的地址 SpringBoot整合Minio 一、配置依賴,application.yml 二、代碼部分 FileVO MinioConfig MinioUploadService MinioController 三…

使用Python繪制太陽系圖

使用Python繪制太陽系圖 太陽系圖太陽系圖的優點使用場景 效果代碼 太陽系圖 太陽系圖(Sunburst Chart)是一種層次結構圖表,用于表示數據的分層結構。它使用同心圓表示各個層級,中心圓代表最高層級,向外的圓環代表逐級…

CCT技術

概念介紹 多個功能核心的集成可以通過片上系統(SOC)或封裝中系統(SIP)設備的開發來實現。SOC器件將核心集成到單個集成電路中。SIP集成是將多個集成電路組合到單個封裝中。核心數量 的增加可能導致必要的測試人員資源和/或測試時間的增加。這直接影響了與測試這些設備相關的…

CesiumJS【Basic】- #031 繪制虛線(Entity方式)

文章目錄 繪制虛線(Entity方式)1 目標2 代碼2.1 main.ts繪制虛線(Entity方式) 1 目標 使用Entity方式繪制虛線 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(

SAP實現特別總賬的憑證預制

SAP實現特別總賬的憑證預制 仔細理解只有”其他”的特殊總帳標識才可預制憑證這句話. F-29/f-48不可預制。F-29/f-48預制時出現錯誤消息號 FP 030,提示特殊總帳標志類型“匯票和”預付定金“的特別總帳標志的過帳代碼不能預制,這是系統寫死的&#xff…

現在電氣真的比不過計算機嗎 ?

電氣工程和計算機科學在今天的科技和工業領域中各有其重要性和發展空間,并不存在簡單的比較誰“比不過”誰的情況。我收集制作一份plc學習包,對于新手而言簡直不要太棒,里面包括了新手各個時期的學習方向,包括了編程教學&#xff…

Pycharm的終端(Terminal)中切換到當前項目所在的虛擬環境

1.在Pycharm最下端點擊終端/Terminal, 2.點擊終端窗口最上端最右邊的∨, 3.點擊Command Prompt,切換環境, 可以看到現在環境已經由默認的PS(Window PowerShell)切換為項目所使用的虛擬環境。 4.更近一步,如果想讓Pycharm默認顯示…

Linux常用工具使用方式

目錄 常用工具: 安裝包管理工具: 查找含有關鍵字的軟件包 安裝軟件 安裝文件傳輸工具 安裝編輯器 C語言編譯器 C編譯器 安裝調試器 安裝項目版本管理工具 cmake 卸載軟件 安裝jsoncpp 安裝boost庫 安裝mariadb 安裝tree(讓目錄…

基于Java的區塊鏈數字身份認證

基于Java的區塊鏈數字身份認證 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將探討基于Java的區塊鏈數字身份認證,這是區塊鏈技術在安全領…

潛水耳機哪個牌子好?用戶精選,這四款潛水耳機質量上乘!

在這個快節奏的時代,人們越來越渴望在運動中也能享受到音樂的陪伴。潛水,作為一種獨特的水下運動,自然也不例外。然而,并非所有的耳機都能承受水下的壓力和環境,這就要求我們對潛水耳機有著更高的要求。作為一名資深的…

數據庫鎖之間有哪些區別?

寫在前面: 此博客內容已經同步到我的博客網站,如需要獲得更優的閱讀體驗請前往https://mainjaylai.github.io/Blog/blog/database/lock 以下是數據庫中常用的幾種鎖類型: 1. 共享鎖(Shared Lock,S Lock) 共享鎖允許多個事務同時讀取同一資源,但不能修改該資源。其他事…

Kubernetes的發展歷程:從Google內部項目到云原生計算的基石

目錄 一、起源與背景 1.1 Google的內部項目 1.2 Omega的出現 二、Kubernetes的誕生 2.1 開源的決策 2.2 初期發布 三、Kubernetes的發展歷程 3.1 社區的成長 3.2 生態系統的壯大 3.3 重大版本和功能 3.4 多云和混合云的支持 四、Kubernetes的核心概念 4.1 Pod 4.…

hive4 從入門到精通

查詢hive 架構 準備 HDFS配置 vim $HADOOP_HOME/etc/hadoop/core-site.xml <!--配置所有節點的root用戶都可作為代理用戶--><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><!--配置root用戶…

Jenkins接口自動化項目的工程創建

jenkins的下載安裝 jenkins下載的官網地址 https://www.jenkins.io/download/ java環境變量的配置下載 jenkins是用java語言編寫的所以要配置java環境 需要安裝java的JDK 推薦安裝JDK17(https://blog.csdn.net/wochunyang/article/details/138520209) JDK17的下載地址 ht…

HTML文本內容 轉化為純文本

public static String htmltoString(String htmlContent) { /*String htmlContent "<p class\"MsoNormal\"><span style\"font-family: 思源黑體 CN Normal;\">1、應用場景</span></p>\n" "<p class\"Ms…

加載數據到mysql并解決原始數據亂碼問題

查看linux上數據&#xff1a; 使用命令轉換編碼&#xff1a; iconv -f GBK -t UTF-8 toutiao.csv -o toutiao2.csv加載數據到mysql: load data local infile /root/toutiao2.csv INTO TABLE pdz FIELDS TERMINATED BY , LINES TERMINATED BY \r\n;