python实现RabbitMQ的消息队列的示例代码

yizhihongxing

下面是关于Python实现RabbitMQ的消息队列的完整攻略,具体内容如下:

RabbitMQ简介

RabbitMQ是一个开源的消息代理和队列系统,它使用Erlang编写,是一个高度可靠、可扩展的平台,适用于许多不同的企业和应用程序。使用RabbitMQ可以帮助应用程序的各个部分之间进行分布式计算,同时保证数据的可靠性和一致性。

RabbitMQ的安装

首先,需要安装RabbitMQ。

Windows

对于Windows系统,请访问RabbitMQ官网下载相应的安装包。

Linux

对于Debian或Ubuntu系统,请在终端中运行以下命令:

sudo apt-get install rabbitmq-server

对于CentOS或Fedora系统,请在终端中运行以下命令:

sudo yum install rabbitmq-server

安装完毕后,可以在终端中运行以下命令启动RabbitMQ:

sudo systemctl start rabbitmq-server

RabbitMQ的Python客户端——Pika

Python的RabbitMQ客户端是Pika,它是一个纯Python实现的RabbitMQ客户端库,提供了与RabbitMQ服务器交互的功能。

可以使用pip安装Pika:

pip install pika

示例一

首先,我们需要导入Pika库,并创建一个RabbitMQ连接:

import pika

connection = pika.BlockingConnection(
    pika.ConnectionParameters('localhost')
)

接着,我们需要在RabbitMQ中创建一个消息队列。如果消息队列不存在,将自动创建。

channel = connection.channel()

channel.queue_declare(queue='hello')

然后,我们需要向消息队列中发送一条消息。下面的示例展示了如何把一个简单的字符串格式的消息发送到hello队列中。

channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')

最后,当我们完成了消息队列的使用后,我们需要释放连接并关闭连接。

connection.close()

完整代码如下:

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")

connection.close()

示例二

我们可以在不同的Python进程之间建立一个消息队列来进行通信。下面的代码展示了在Python中使用RabbitMQ的方法。

首先,我们需要创建一个新的队列。

channel.queue_declare(queue='task_queue', durable=True)

然后,我们需要创建一个callback函数,该函数接收消息,模拟一个耗时的任务,并在任务完成后删除该消息。

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    time.sleep(body.count(b'.'))
    print(" [x] Done")
    ch.basic_ack(delivery_tag=method.delivery_tag)

接下来,我们需要告诉RabbitMQ,当有新的消息到达时,调用这个callback函数。

channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='task_queue', on_message_callback=callback)

然后我们开始接收消息,并等待新的消息到达。

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

完整代码如下:

import pika
import time

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)
print(' [*] Waiting for messages. To exit press CTRL+C')

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    time.sleep(body.count(b'.'))
    print(" [x] Done")
    ch.basic_ack(delivery_tag=method.delivery_tag)

channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='task_queue', on_message_callback=callback)

channel.start_consuming()

这个示例建立了一个作为task_queue的消息队列,并模拟了一个耗时的任务来处理消息。在这个示例中,我们使用了channel.basic_qos(prefetch_count=1)设置了Consumer的预取计数,以保证只有一个消息被同时分配给每个Worker。同时我们设置了durable=True来保证即使RabbitMQ出现异常情况导致消息队列崩溃,队列仍然可以持久化存储和恢复。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现RabbitMQ的消息队列的示例代码 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 深入学习spring cloud gateway 限流熔断

    深入学习Spring Cloud Gateway 限流熔断攻略 什么是Spring Cloud Gateway Spring Cloud Gateway是一个构建在Spring Framework 5,Project Reactor和Spring Boot 2之上的网关,可以作为所有基于HTTP路由的API的入口点。它提供了一种简单而有效的方式来传递客户端请…

    人工智能概览 2023年5月25日
    00
  • 漫谈架构之微服务

    漫谈架构之微服务 随着互联网技术的不断发展,软件系统规模不断增大,单一的架构已经无法满足业务的需要。于是,微服务架构应运而生。 什么是微服务架构? 微服务架构是将一个庞大的系统拆分成多个相对独立的小服务,每个小服务都拥有自己的独立部署、独立维护、独立扩展的能力。这样可以让整个系统更加灵活、高效、容错。相对于传统的单体应用架构,微服务架构可以提高开发效率、降低…

    人工智能概览 2023年5月25日
    00
  • 详解springboot整合mongodb

    下面是“详解SpringBoot整合MongoDB”的完整攻略: 1. 前置条件 在使用SpringBoot整合MongoDB之前,需要先满足以下条件: 安装Java JDK,推荐使用Java 8或以上版本。 安装MongoDB数据库,推荐使用MongoDB 4.0或以上版本。 在IDE中安装SpringBoot插件,推荐使用IntelliJ IDEA或Ec…

    人工智能概论 2023年5月25日
    00
  • Apache如何部署django项目

    下面是 Apache 如何部署 Django 项目的完整攻略: 一、在 Apache 中配置 mod_wsgi 模块 Apache 是一款广泛使用的 Web 服务器,而 mod_wsgi 是一款可以在 Apache 上运行 Python 代码的模块。因此,为了部署 Django 项目,我们首先需要在 Apache 中配置 mod_wsgi 模块。 安装 mo…

    人工智能概览 2023年5月25日
    00
  • Python中文分词库jieba,pkusegwg性能准确度比较

    Python中文分词库jieba,pkuseg比较 在Python中,中文分词一直是一个非常重要的任务。而jieba和pkuseg是两个比较常用的中文分词工具。在本文中,我们将对这两个工具进行比较,包括性能、准确度等因素。 jieba 首先介绍的是jieba,它是一个中文分词工具包,功能强大,使用方便,因此被广泛使用。这是非常成熟的一个工具,经过多年的开发和…

    人工智能概论 2023年5月25日
    00
  • EVGA GeForce GTX 1060 FTW+GAMING显卡评测和拆解图

    EVGA GeForce GTX 1060 FTW+GAMING显卡评测和拆解图 EVGA GeForce GTX 1060 FTW+GAMING显卡是一款高性能显卡,下面我们将给出它的评测和拆解图。 性能测试 我们使用以下测试平台进行了测试: CPU: Intel Core i7-8700K 内存: 16GB DDR4 显示器: ASUS VG279Q 在…

    人工智能概览 2023年5月25日
    00
  • TensorFlow.js实现AI换脸使用示例详解

    TensorFlow.js实现AI换脸使用示例详解 简介 TensorFlow.js是一个让我们可以在浏览器中运行深度学习模型的JavaScript库。它允许我们在浏览器中训练和部署机器学习模型,也可以在浏览器中使用已经训练好的模型,而无需任何服务器。 AI换脸是一种近年来比较流行的应用,它可以将两个人的脸合成在一起。本次将介绍如何使用TensorFlow.…

    人工智能概论 2023年5月24日
    00
  • 浅析MongoDB 全文检索

    浅析MongoDB全文检索 在MongoDB中进行全文搜索可以使用它的全文索引。MongoDB中的全文搜索可以对文本字段建立索引,对这些字段进行全文搜索。下面将介绍如何在MongoDB中建立全文索引,并进行全文搜索。 建立全文索引 在MongoDB中建立全文索引可以使用文本索引类型。假设我们有一个名为users集合,其中包含一个description字段,请…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部