RabbitMQ的使用—实战

RabbitMQ的使用---实战

​ RabbitMQ是一个开源的消息代理中间件,在分布式系统开发中被广泛应用。它实现了高级消息队列协议(AMQP),提供可靠的消息传递、灵活的路由、消息确认等功能。下面是使用RabbitMQ的基本流程:

  1. 安装 RabbitMQ

首先需要在您的系统上安装 RabbitMQ。具体安装步骤根据您的操作系统不同而有所区别。您可以访问RabbitMQ 官方网站获取安装指南。

  1. 连接到 RabbitMQ

使用任何支持 AMQP 协议的客户端库与 RabbitMQ 建立连接。常用的客户端库包括 pika(Python)、RabbitMQ.Client(C#)等。

实 战:

系统:mac OS

环境:Pycharm2021

构造一个请求对象,然后通过pickle工具进行序列化,最后送到RabbitMQ中。生产者代码如下:

python 复制代码
import pika
import requests
import pickle

MAX_PRIORITY = 100
TOTAL = 100
QUEUE_NAME = 'scrape_queue'

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost')
)
channel = connection.channel()
channel.queue_declare(queue=QUEUE_NAME,durable=True)

for i in range(1, TOTAL+1):
    url = f'https://ssr1.scrape.center/detail/{i}'
    request = requests.Request('GET',url)
    channel.basic_publish(exchange='',
                          routing_key=QUEUE_NAME,
                          properties=pika.BasicProperties(delivery_mode=2,),body=pickle.dumps(request))
    print(f'Put request of {url}')

对于消费者,可以编写一个循环,让它不断地从队列中取出请求对象,取出一个就执行一次爬虫任务,实现如下:

复制代码
import pika
import pickle
import requests

MAX_PRIORITY = 100
QUEUE_NAME = 'scrape_queue'

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost')
)
channel = connection.channel()
session = requests.Session()

def scrape(request):
    try:
        response = session.send(request.prepare())
        print(f'success scraped {response.url}')
    except request.RequestException:
        print(f'error occurred when scraping {request.url}')

while 1:
    method_frame, header, body = channel.basic_get(
        queue=QUEUE_NAME, auto_ack=True
    )

    if body:
        request = pickle.loads(body)
        print(f'Get {request}')
        scrape(request)

这里消费者调用basic_get方法获取了消息,然后通过pickle工具把消息反序列化还原成一个请求对象,之后使用session的send方法执行该请求,爬取了数据,如果爬取成功就打印爬取成功的消息。

运行结果如下:

可以看到,消费者依次取出了请求对象,然后成功完成了一个个爬取任务。

以上示例可以在[小蜜蜂AI网站][https://zglg.work]获取更多的应用体验。

相关推荐
LDG_AGI39 分钟前
【推荐系统】深度学习训练框架(二十一):DistributedCheckPoint(DCP) — PyTorch分布式模型存储与加载
pytorch·分布式·深度学习
LDG_AGI1 小时前
【推荐系统】深度学习训练框架(二十三):TorchRec端到端超大规模模型分布式训练+推理实战
人工智能·分布式·深度学习·机器学习·数据挖掘·推荐算法
清晓粼溪1 小时前
SpringCloud-05-Micrometer Tracing+ZipKin分布式链路追踪
分布式·spring·spring cloud
独自破碎E1 小时前
聊聊RabbitMQ
分布式·rabbitmq
小股虫1 小时前
缓存攻防战:在增长中台设计一套高效且安全的缓存体系
java·分布式·安全·缓存·微服务·架构
2503_946971862 小时前
【FullStack/ZeroDay】2026年度全栈魔法架构与分布式恶意节点清除基准索引 (Benchmark Index)
分布式·网络安全·架构·系统架构·区块链·数据集·全栈开发
回家路上绕了弯2 小时前
Resilience4j全面指南:轻量级熔断限流框架的实战与落地
分布式·后端
wang09072 小时前
支持rabbitmq多数据源
rabbitmq
LDG_AGI2 小时前
【推荐系统】深度学习训练框架(二十二):PyTorch2.5 + TorchRec1.0超大规模模型分布式推理实战
人工智能·分布式·深度学习
2503_946971863 小时前
【SystemDesign/HA】2025年度高可用分布式仿真节点与预测模型容灾演练配置 (Disaster Recovery Config)
大数据·分布式·算法·系统架构·数据集