溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

RabbitMQ消息分發(fā)輪詢

發(fā)布時(shí)間:2020-08-02 13:59:23 來源:網(wǎng)絡(luò) 閱讀:1076 作者:眉間雪 欄目:建站服務(wù)器

我們首先下載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()



向AI問一下細(xì)節(jié)

免責(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)容。

AI