【原創】RabbitMQ 簡單玩法之——生產者/消費者

大家都知道RabbitMQ是用來處理高併發,多個請求,通過生產者和消費者以及channel的技術來實現消息的高併發處理的技術。

那麼如何在代碼裏面裏面實現呢?

生產者/消費者模式

1.首先我們要知道,RabbitMQ的實現模式,通過創建一個隊列來存儲生產者發送的消息,然後消費者通過既定的規則去隊列裏面去取,然後做相應的動作。

一、設計生產者:

在開始編寫代碼之前,我們要確認電腦上是否安裝了pika庫,怎麼知道呢?

打開“File”——>"Other setttings"——>"Preferences for New Projects",

在彈出的界面,選擇“Project Interpreter”,看右側的界面是否有pika庫。

if pika not in xl_list: #如果pika不在下拉列表裏面點擊下面的“➕”符號

 

    

在彈出的搜索框中輸入pika,就會出現pika,點擊鼠標選擇,然後點擊下面的“Install Package”,如果安裝失敗的話會有提示,我的因爲版本的問題,在這裏兩次安裝失敗,我就知道在這裏安裝肯定是無法實現的了。於是我打開shell客戶端,然後在裏面輸入

提示安裝成功。然後就可以在Pycharm上看到我們pika庫。

點擊OK,就可以了。

二、開始寫代碼了

send.py

# !usr/bin/env python3.7
#encoding=utf-8
#author = gaos
"""
發送者
"""
import pika
credentials = pika.PlainCredentials('admin','admin')

#鏈接RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1','5672','/',credentials))

#創建通道
channel = connection.channel()
#聲明隊列hello,RabbitMQ的消息隊列機制 如果隊列不存在那麼數據將會被丟失掉,下面我們先聲明一個隊列,如果不存在創建
channel.queue_declare(queue='hello')

#給隊列中添加消息
channel.basic_publish(exchange="",
                routing_key="hello",
                body="Hello World"
                )
print("向隊列hello添加數據結束")

注意:最開始的時候我按之前的教程裏面在調用的是publish函數,但是有提示報錯,沒有publish函數,所以這個查了網上的資料才發現原來是,後面的辦法是publish改成了basic_publish導致的,改過來之後就可以了。

 

receive.py

# !/usr/bin/env python3.7
# -*- coding:utf-8 -*-
# __author__ == 'Gaos'
"""
消費者/接收方
"""
import pika

# 認證信息
credentials = pika.PlainCredentials("admin", "admin")
# 連接RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters("127.0.0.1", 5672, "/", credentials))

# 創建通道
channel = connection.channel()

# 聲明隊列hello,RabbitMQ的消息隊列機制如果隊列不存在那麼數據將會被丟掉,下面我們聲明一個隊列如果不存在創建
channel.queue_declare(queue='hello')
"""
在發送方已經hello隊列了,爲什麼在接收方也是消費者這裏還在聲明一邊隊列?
發送方/接收方  ,接收的先起來了
如果說你能100%啓動消費者之前一定聲明瞭隊列,這裏不謝也可以
"""


# 訂閱的回調函數這個訂閱回調函數是由pika庫來調用的
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

# 定義通道消費者參數
channel.basic_consume(queue='hello',
                      on_message_callback=callback,
                      auto_ack=True)  # 這個地方按照視頻裏面寫有錯誤,原因在於新版的pika裏面,參數的位置發生了改變

print(' [*] Waiting for messages. To exit press CTRL+C')
# 開始接收信息,並進入阻塞狀態,隊列裏有信息纔會調用callback進行處理。按ctrl+c退出。
channel.start_consuming()

完成之後,在Pycharm裏面啓動Receive.py 和send.py 就可以看到結果了。

先啓動recive.py

 

然後啓動send.py

每當我們運行一次send.py ,receive.py就會收到一條數據。

連續運行三次send.py之後,send.py 收到並輸出的數據。

 

參考網址:

https://www.jianshu.com/p/72e8f9ecb888  basic_consume() got multiple values for keyword argument 'queue'

https://www.jianshu.com/p/5d3960e3eb06  《玩轉RabbitMQ之四:第一個小程序Hello World》

https://www.cnblogs.com/luotianshuai/p/7469365.html  《RabbitMQ介紹

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章