您好,登錄后才能下訂單哦!
我們首先下載pika,以及rabbitMQ,和ir語言,rabbitMQ是由ir語言編寫的
消息隊(duì)列的使用過程大概如下:
(1)客戶端連接到消息隊(duì)列服務(wù)器,打開一個(gè)channel。
channel:消息通道,在客戶端的每個(gè)連接里,可建立多個(gè)channel,每個(gè)channel代表一個(gè)會(huì)話任務(wù)。
(2)客戶端聲明一個(gè)exchange,并設(shè)置相關(guān)屬性。
Exchange:消息交換機(jī),它指定消息按什么規(guī)則,路由到哪個(gè)隊(duì)列。
(3)客戶端聲明一個(gè)queue,并設(shè)置相關(guān)屬性。
Queue:消息隊(duì)列載體,每個(gè)消息都會(huì)被投入到一個(gè)或多個(gè)隊(duì)列。
(4)客戶端使用routing key,在exchange和queue之間建立好綁定關(guān)系。
Routing Key:路由關(guān)鍵字,exchange根據(jù)這個(gè)關(guān)鍵字進(jìn)行消息投遞。
(5)客戶端投遞消息到exchange。
Exchange:消息交換機(jī),它指定消息按什么規(guī)則,路由到哪個(gè)隊(duì)列。
接下來寫一個(gè)生產(chǎn)者:
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters('localhost'))
channel = connection.channel()#先通過socket建立一個(gè)實(shí)例,創(chuàng)建一個(gè)新的頻道
# 聲明queue
channel.queue_declare(queue='hello')# 注意此處需要聲明一個(gè)管道或者稱之為隊(duì)列,在此處出發(fā)消息 同時(shí)客戶端與服務(wù)端都需要
# n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
channel.basic_publish(exchange='',
routing_key='hello',#queue名字#路由鍵,寫明將消息發(fā)往哪個(gè)隊(duì)列,本例是將消息發(fā)往隊(duì)列pikamq
body='Hello World!')# 消息內(nèi)容
print(" [x] Sent 'Hello World!'")# 當(dāng)生產(chǎn)者發(fā)送完消息后,可選擇關(guān)閉連接
connection.close()
消費(fèi)者:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost' ))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print('--->',ch,method,properties)
print(" [x] Received %r"%body)
channel.basic_consume(callback,
queue='hello',
#no_ack=True #此處有的代碼加了,但是python系統(tǒng)會(huì)自帶,同時(shí)加了之后,一旦等待時(shí)間過長,生產(chǎn)者發(fā)送的消息,無法轉(zhuǎn)移到另一個(gè)消費(fèi)者中
)
channel.start_consuming()
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。