app對接網(wǎng)站登錄要怎么做優(yōu)化營商環(huán)境心得體會2023
引言
RabbitMQ是一個流行的開源消息代理,用于在分布式系統(tǒng)中實現(xiàn)異步消息傳遞。它基于Erlang語言編寫,具有高可用性和可伸縮性。在本文中,我們將探討如何在Python中使用RabbitMQ進行消息發(fā)送和消費。
安裝RabbitMQ
在 Ubuntu 上安裝 RabbitMQ 可以通過多種方式完成,包括使用包管理器、Docker 容器或從源代碼編譯。以下是最簡單和最常見的方法,使用包管理器進行安裝。
安裝 Erlang:
添加 PPA 之后,可以安裝 Erlang。
sudo apt install erlang
安裝 RabbitMQ:
在 Erlang 安裝完成后,可以安裝 RabbitMQ。
sudo apt install rabbitmq-server
啟動 RabbitMQ:
安裝完成后,可以啟動 RabbitMQ 服務(wù)。
sudo systemctl start rabbitmq-server
設(shè)置 RabbitMQ 用戶:
為了安全起見,應(yīng)該創(chuàng)建一個 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
是想要創(chuàng)建的用戶名,your_password
是該用戶的密碼。
檢查 RabbitMQ 狀態(tài):
使用以下命令檢查 RabbitMQ 服務(wù)狀態(tài)。
sudo systemctl status rabbitmq-server
配置 RabbitMQ 防火墻:
根據(jù)您的網(wǎng)絡(luò)配置,可能需要配置防火墻規(guī)則以允許外部客戶端訪問 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 服務(wù),可以使用以下命令。
sudo systemctl stop rabbitmq-server
查看 RabbitMQ 版本:
使用以下命令查看已安裝的 RabbitMQ 版本。
sudo rabbitmq-server -v
安裝完成后,可以通過訪問 http://localhost:15672
來訪問 RabbitMQ 管理界面。如果已經(jīng)設(shè)置了用戶,將需要使用創(chuàng)建的用戶名和密碼登錄。請注意,RabbitMQ 服務(wù)器配置和安全性是復(fù)雜的主題,上述步驟提供了基本的安裝和配置指南。根據(jù)具體需求,可能需要進行更詳細的配置。
安裝pika
pika
是一個用于 RabbitMQ 的 Python 客戶端庫,它允許創(chuàng)建和控制 RabbitMQ 隊列、交換器、綁定和消息。安裝也非常簡單,安裝完成后,就可以在 Python 代碼中導(dǎo)入 pika
庫并使用它來與 RabbitMQ 交互。
pip install pika
發(fā)送消息
首先,來看一下如何發(fā)送消息到RabbitMQ隊列。以下代碼片段展示了如何連接到RabbitMQ服務(wù)器,聲明一個隊列,并發(fā)布一個消息到該隊列。
#!/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()
- 創(chuàng)建一個
ConnectionParameters
實例,定義了與RabbitMQ服務(wù)器建立連接所需的參數(shù):host='localhost'
:指定RabbitMQ服務(wù)器的主機名,這里是本地主機。heartbeat=3600
:心跳間隔,單位為秒,用于保持連接的活躍性。blocked_connection_timeout=300
:如果連接被阻塞,這個參數(shù)定義了連接超時的時間,單位為秒。
connection = pika.BlockingConnection(...)
:使用pika.BlockingConnection
創(chuàng)建一個到RabbitMQ的阻塞連接。這意味著連接操作會等待直到成功建立連接。channel = connection.channel()
:創(chuàng)建一個新的通信信道。在RabbitMQ中,信道是進行消息傳遞的通道。channel.queue_declare(queue='hello')
:聲明一個名為hello
的隊列。如果該隊列不存在,RabbitMQ會創(chuàng)建它。channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
:發(fā)布(發(fā)送)一條消息到隊列。參數(shù)說明:exchange
:交換機名稱,這里為空字符串,表示使用默認的交換機。routing_key
:路由鍵,這里與隊列名相同,表示消息將直接發(fā)送到hello
隊列。body
:消息體,這里是字符串'Hello World!'
。
消費消息
接下來,看一下如何從RabbitMQ隊列中消費消息。以下代碼片段展示了如何連接到RabbitMQ服務(wù)器,聲明一個隊列,并使用回調(diào)函數(shù)來處理收到的消息。
#!/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)
- 定義一個名為
callback
的函數(shù),它將作為消費消息時的回調(diào)函數(shù)。當(dāng)消息到達時,這個函數(shù)會被調(diào)用,并打印出消息體。 channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
:開始消費hello
隊列中的消息。on_message_callback
參數(shù)指定了當(dāng)消息到達時調(diào)用的回調(diào)函數(shù),auto_ack=True
表示自動確認消息。
結(jié)論
本文介紹了如何在 Python 中使用 RabbitMQ 進行消息發(fā)送和消費。RabbitMQ 是異步消息傳遞的強有力工具,適用于構(gòu)建可靠、可伸縮的分布式系統(tǒng)。隨著微服務(wù)架構(gòu)的流行,RabbitMQ 在現(xiàn)代軟件開發(fā)中的作用越來越重要。