【原创】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介绍

 

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