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

下面是关于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日

相关文章

  • Pytorch中torch.cat()函数的使用及说明

    下面我来详细讲解一下PyTorch中torch.cat()函数的使用及说明。 一、torch.cat()函数概述 torch.cat()函数是一个PyTorch中的张量拼接函数,用于将多个张量按照给定的维度拼接在一起,生成一个新的张量。 torch.cat()可以在任意指定的维度上拼接tensor,而其他常见的拼接操作函数比如torch.stack()则只能…

    人工智能概论 2023年5月25日
    00
  • Django项目中使用JWT的实现代码

    下面是关于Django项目中使用JWT的实现代码的完整攻略,包括最基本的JWT的使用和带有自定义用户模型的JWT使用: 基本JWT的使用 步骤1:安装相关库 在Django项目中使用JWT,需要安装两个Python库:pyjwt和django-rest-framework-jwt,可以使用以下命令进行安装: pip install pyjwt pip ins…

    人工智能概论 2023年5月25日
    00
  • springboot整合mongodb changestream的示例代码

    针对springboot整合mongodb changestream示例代码的完整攻略,我将分为以下几个部分进行讲解: 确认环境和依赖 创建MongoDB数据库和集合 添加MongoDB依赖 编写Changestream监听代码 处理Changestream的变更事件 示例说明 确认环境和依赖 在开始这个示例之前,我们需要先确认以下环境和依赖是否已安装和配置…

    人工智能概论 2023年5月25日
    00
  • spring cloud config 配置中心快速实现过程解析

    下面是详细讲解“spring cloud config 配置中心快速实现过程解析”的完整攻略。 一、背景介绍 在分布式系统中,应用程序的配置信息通常需要统一管理,比如数据库连接、Redis等数据源的配置信息等。而Spring Cloud Config提供了一种统一的方式来管理这些配置。 Spring Cloud Config基于Spring Boot,通过创…

    人工智能概览 2023年5月25日
    00
  • python 实现文件的递归拷贝实现代码

    下面是详细讲解如何使用 Python 实现文件递归拷贝的攻略: 1. 确定拷贝源和目标 在开始编写拷贝代码之前,首先需要明确需要拷贝哪些文件,以及拷贝到哪个目标路径。可以使用 Python 的 os 模块 来获取文件列表,并使用 shutil 模块 来完成文件拷贝的操作。具体代码如下: import os import shutil src_path = ‘…

    人工智能概论 2023年5月25日
    00
  • MongoDB 删除文档的方式(删除一个、批量删除)

    MongoDB 是一个 NoSQL 数据库系统,它提供了多种删除文档的方式。在本文中,我们将详细讲解 MongoDB 删除文档的方式,包括删除一个和批量删除。 删除一个文档 要删除一个文档,我们可以使用 deleteOne 方法。该方法接受一个查询条件作为参数,它将删除满足该条件的第一个文档。如果查询条件匹配多个文档,则只删除第一个。 ### 删除一个文档 …

    人工智能概论 2023年5月25日
    00
  • 浅谈Redis在分布式系统中的协调性运用

    浅谈 Redis 在分布式系统中的协调性运用 什么是 Redis Redis 是一个开源的,高性能的,基于内存的数据结构存储系统,可以作为缓存系统、数据库、消息中间件等多种用途。Redis 支持丰富的数据结构如字符串、哈希表、链表、集合等。Redis 以其快速的读写速度、灵活的数据结构以及完善的功能特性被广泛应用于许多的 Web 应用中。 Redis 在分布…

    人工智能概览 2023年5月25日
    00
  • 基于Python搭建人脸识别考勤系统

    下面是基于Python搭建人脸识别考勤系统的完整攻略。 1. 前置条件 一台配置好python开发环境的电脑(建议安装anaconda和pycharm等IDE) 安装opencv和face_recognition库 一张人员的面部照片(被用来训练面部识别模型),另外还需要一些人脸照片用来测试面部识别的准确性 一台支持摄像头使用的电脑 2. 搭建人脸识别考勤系…

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