python中运用RabbitMQ的基础使用

# 知识复盘

在爬取数据的时候,可能需要一些进程之间的通信机制,例如:A:负责构建爬取请求,B:负责执行爬取请求,C:负责处理爬取的数据。当A构造完后,通知B开始爬取,B爬取完通知C开始处理数据。这个需求可以利用方法的调用去完成,但进程的耦合度高,不建议使用。

业内中,针对这一现象就出现了消息队列的中间件,例如Rabbitmq,RocketMQ,Kafka等,本文介绍的是Rabbitmq,

准备工作:

请确保已经安装好了RabbitMq服务,其次还需要安装一个操作RabbitMq的python库,叫pike,使用命令:

pip3 install pika

基本使用

首先,RabbitMQ就是一个消息队列,我们要实现进程通信,从本质上它就是生产者--消费者模型,即一个进程作为生产者,将信息放入到消息队列,另一个进程则通过消息队列将信息取出,主要有三个点需要关注:

1. 声明队列(创建一个produce.py文件):

# 消息队列rabbitmq-生产者
import pika

QUEUE_NAME = "scrape"
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))  # 连接本地rabbitmq服务
channel = connection.channel()  # 频道对象 利用它可以操作队列内消息的生产和消费
channel.queue_declare(queue=QUEUE_NAME)  # 声明一个消息队列,队列名称为scrape

2. 生产内容:

channel.basic_publish(exchange='', routing_key=QUEUE_NAME, body='Hello,Rabbitmq!')  # 将数据存储到消息队列中,用到basic_publish

3. 消费内容(创建一个consumer.py文件):

# 消息队列rabbitmq-消费者
import pika

QUEUE_NAME = "scrape"
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))  # 连接本地rabbitmq服务
channel = connection.channel()  # 频道对象 利用它可以操作队列内消息的生产和消费
channel.queue_declare(queue=QUEUE_NAME)  # 声明一个消息队列,队列名称为scrape


# 从队列获取数据
def getData(ch, method, properties, body):
    print(f"得到{body}")


channel.basic_consume(queue=QUEUE_NAME, auto_ack=True, on_message_callback=getData)  # 从消息队列中取出数据,用到basic_consume
channel.start_consuming()

4. 演示

首先本地运行consumer.py,其次运行produce.py文件,最后返回consumer.py观察控制台,是否从消息队列中取出信息,如图:

以上便是RabbitMQ的基础使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值