基于RabbitMQ的异步消息传递:发送与消费

引言

RabbitMQ是一个流行的开源消息代理,用于在分布式系统中实现异步消息传递。它基于Erlang语言编写,具有高可用性和可伸缩性。在本文中,我们将探讨如何在Python中使用RabbitMQ进行消息发送和消费。

安装RabbitMQ

在 Ubuntu 上安装 RabbitMQ 可以通过多种方式完成,包括使用包管理器、Docker 容器或从源代码编译。以下是最简单和最常见的方法,使用包管理器进行安装。

安装 Erlang:
添加 PPA 之后,可以安装 Erlang。

sudo apt install erlang

安装 RabbitMQ:
在 Erlang 安装完成后,可以安装 RabbitMQ。

sudo apt install rabbitmq-server

启动 RabbitMQ:
安装完成后,可以启动 RabbitMQ 服务。

sudo systemctl start rabbitmq-server

设置 RabbitMQ 用户:
为了安全起见,应该创建一个 RabbitMQ 用户。

sudo rabbitmqctl add_user your_username your_password
sudo rabbitmqctl set_permissions -p / your_username ".*" ".*" ".*"
sudo rabbitmqctl set_user_tags your_username administrator
sudo rabbitmqctl set_permissions -p / your_username ".*" ".*" ".*"

在这里,your_username 是想要创建的用户名,your_password 是该用户的密码。

检查 RabbitMQ 状态:
使用以下命令检查 RabbitMQ 服务状态。

sudo systemctl status rabbitmq-server

配置 RabbitMQ 防火墙:
根据您的网络配置,可能需要配置防火墙规则以允许外部客户端访问 RabbitMQ。

sudo ufw allow from any to any port 5672 proto tcp
sudo ufw allow from any to any port 15672 proto tcp

停止 RabbitMQ:
如果想要停止 RabbitMQ 服务,可以使用以下命令。

sudo systemctl stop rabbitmq-server

查看 RabbitMQ 版本:
使用以下命令查看已安装的 RabbitMQ 版本。

sudo rabbitmq-server -v

image.png

安装完成后,可以通过访问 http://localhost:15672 来访问 RabbitMQ 管理界面。如果已经设置了用户,将需要使用创建的用户名和密码登录。请注意,RabbitMQ 服务器配置和安全性是复杂的主题,上述步骤提供了基本的安装和配置指南。根据具体需求,可能需要进行更详细的配置。

安装pika

pika 是一个用于 RabbitMQ 的 Python 客户端库,它允许创建和控制 RabbitMQ 队列、交换器、绑定和消息。安装也非常简单,安装完成后,就可以在 Python 代码中导入 pika 库并使用它来与 RabbitMQ 交互。

pip install pika

发送消息

首先,来看一下如何发送消息到RabbitMQ队列。以下代码片段展示了如何连接到RabbitMQ服务器,声明一个队列,并发布一个消息到该队列。

#!/usr/bin/env python
import pikaparams = pika.ConnectionParameters(host='localhost', heartbeat=3600, blocked_connection_timeout=300)
connection = pika.BlockingConnection(pika.ConnectionParameters(host='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()
  1. 创建一个ConnectionParameters实例,定义了与RabbitMQ服务器建立连接所需的参数:
    • host='localhost':指定RabbitMQ服务器的主机名,这里是本地主机。
    • heartbeat=3600:心跳间隔,单位为秒,用于保持连接的活跃性。
    • blocked_connection_timeout=300:如果连接被阻塞,这个参数定义了连接超时的时间,单位为秒。
  2. connection = pika.BlockingConnection(...):使用pika.BlockingConnection创建一个到RabbitMQ的阻塞连接。这意味着连接操作会等待直到成功建立连接。
  3. channel = connection.channel():创建一个新的通信信道。在RabbitMQ中,信道是进行消息传递的通道。
  4. channel.queue_declare(queue='hello'):声明一个名为hello的队列。如果该队列不存在,RabbitMQ会创建它。
  5. channel.basic_publish(exchange='', routing_key='hello', body='Hello World!'):发布(发送)一条消息到队列。参数说明:
    • exchange:交换机名称,这里为空字符串,表示使用默认的交换机。
    • routing_key:路由键,这里与队列名相同,表示消息将直接发送到hello队列。
    • body:消息体,这里是字符串'Hello World!'

image.png

消费消息

接下来,看一下如何从RabbitMQ队列中消费消息。以下代码片段展示了如何连接到RabbitMQ服务器,声明一个队列,并使用回调函数来处理收到的消息。

#!/usr/bin/env python
import pika, sys, osdef main():connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel()channel.queue_declare(queue='hello')def callback(ch, method, properties, body):print(" [x] Received %r" % body)channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)print(' [*] Waiting for messages. To exit press CTRL+C')channel.start_consuming()if __name__ == '__main__':try:main()except KeyboardInterrupt:print('Interrupted')try:sys.exit(0)except SystemExit:os._exit(0)
  1. 定义一个名为callback的函数,它将作为消费消息时的回调函数。当消息到达时,这个函数会被调用,并打印出消息体。
  2. channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True):开始消费hello队列中的消息。on_message_callback参数指定了当消息到达时调用的回调函数,auto_ack=True表示自动确认消息。

image.png

结论

本文介绍了如何在 Python 中使用 RabbitMQ 进行消息发送和消费。RabbitMQ 是异步消息传递的强有力工具,适用于构建可靠、可伸缩的分布式系统。随着微服务架构的流行,RabbitMQ 在现代软件开发中的作用越来越重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/365439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GaussDB关键技术原理:高性能(三)

GaussDB关键技术原理:高性能(二)从查询处理综述对GaussDB的高性能技术进行了解读,本篇将从查询重写RBO、物理优化CBO、分布式优化器、布式执行框架、轻量全局事务管理GTM-lite等五方面对高性能关键技术进行分享。 目录 3 高性能…

PyTorch之nn.Module、nn.Sequential、nn.ModuleList使用详解

文章目录 1. nn.Module1.1 基本使用1.2 常用函数1.2.1 核心函数1.2.2 查看函数1.2.3 设置函数1.2.4 注册函数1.2.5 转换函数1.2.6 加载函数 2. nn.Sequential()2.1 基本定义2.2 Sequential类不同的实现2.3 nn.Sequential()的本质作用 3. nn.ModuleList参考资料 本篇文章主要介绍…

AI绘画-Stable Diffusion 原理介绍及使用

引言 好像很多朋友对AI绘图有兴趣,AI绘画背后,依旧是大模型的训练。但绘图类AI对计算机显卡有较高要求。建议先了解基本原理及如何使用,在看看如何实现自己垂直行业的绘图AI逻辑。或者作为使用者,调用已有的server接口。 首先需…

Open3D (C++) 点云旋转至主成分空间

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 首先使用主成分分析法计算出点云的特征值与特征向量,然后根据点云的特征向量计算出点云与主成分空间之间的…

CAM350怎么添加文字?

CAM350怎么添加文字? CAM350只能修改用CAM350本身做的文字,其它软件生成的GERBER文件导入到CAM350会默认为线条,没办法修改。 如果想添加文字,先把原先的文字删除。然后在CAM350里面重新添加文字就可以了。 操作方法如下&#xf…

Java代码生成器(开源版本)

一、在线地址 Java在线代码生成器:在线访问 二、页面截图 三、核心功能 支持Mybatis、MybatisPlus、Jpa代码生成使用 antlr4 解析SQL语句,保证了SQL解析的成功率支持自定义包名、作者名信息支持自定义方法名、接口地址支持自定义选择是否生成某个方法…

力扣 单链表元素删除解析及高频面试题

目录 删除元素的万能方法 构造虚拟头结点来应对删除链表头结点的情况 一、203.移除链表元素 题目 题解 二、19.删除链表中倒数第K个节点 题目 题解 三、 83.删除某个升序链表中的重复元素,使重复的元素都只出现一次 题目 题解 82.删除某个升序链表中的…

mongodb在windows环境安装部署

一、mongodb 1.释义 MongoDB 是一种开源的文档型 NoSQL 数据库管理系统,使用 C 编写,旨在实现高性能、高可靠性和易扩展性。MongoDB 采用了面向文档的数据模型,数据以 JSON 风格的 BSON(Binary JSON)文档存储&#x…

第一周:李宏毅机器学习笔记

第一周学习周报 摘要一、机器学习基础理论1. 什么是机器学习?2. 机器学习“寻找”的函数有哪些类型?3. 机器学习中机器如何“寻找”函数?三步走3.1 第一步:设定函数的未知量(Function with Unknown Parameters&#xf…

SpringMvc 执行原理

当用户请求 会发送到前端控制器,DisptcherServlet根据请求参数生成代理请求,找到对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视…

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…

⭐Ollama的本地安装⚡

先来逛一下咱们的主角Ollama的官网地址: Ollama 大概长这个样子🤔 因为本地系统的原因,文章只提供Widows的安装方式,使用Linux和Mac的大佬,可以自行摸索🧐 下载完成后就是安装了🍕&#xff0c…

黑龙江等保测评科普

黑龙江的等保测评,即信息安全等级保护测评,是中国网络安全法框架下的一项重要制度,旨在提升信息系统安全水平,保护关键信息基础设施免受威胁。下面是对黑龙江等保测评流程和要求的科普: 1. 等保测评概念 定义&#xff…

【正点原子K210连载】 第十二章 跑马灯实验 摘自【正点原子】DNK210使用指南-CanMV版指南

1)实验平台:正点原子ATK-DNK210开发板 2)平台购买地址https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第十二章 跑马灯实验…

线程实现模型

用户级线程模型 此模型下的线程是由用户级别的线程库全权管理的 线程库并不是内核的一部分,而只是存储在进程的用户空间之中,这些线程的存在在对于内核来说是无法感知的 应用程序在对线程进行创建、终止、切换或同步等操作的时候, 并不需要…

解题思路:LeetCode 第 209 题 “Minimum Size Subarray Sum“

解题思路:LeetCode 第 209 题 “Minimum Size Subarray Sum” 在这篇博文中,我们将探讨如何使用 Swift 解决 LeetCode 第 209 题 “Minimum Size Subarray Sum”。我们会讨论两种方法:暴力法和滑动窗口法,并对这两种方法的时间复…

阿里云centos 7.9 使用宝塔面板部署.netcore 6.0

前言: 在做工作之前之前,如果你的服务器有数据盘,而且又没挂载,但是你想使用数据盘做为工作目录,建议跳转到下面这个链接先挂载数据盘,并到数据盘创建好目录,修改站点工作目录到数据盘的目录&am…

骑行十里箐:风景,挑战与心灵,在幽谷中的协奏曲

2024年6月29日,星期六,一个看似平凡的日子,却因一次不同寻常的骑行而变得难以忘怀。作为校长骑行群的一员,我有幸参加了这次骑行十里箐的活动。从滇池后海的宁静开始,到宝珠山顶的壮观落幕,这一天的旅程充满…

JFreeChart 生成Word图表

文章目录 1 思路1.1 概述1.2 支持的图表类型1.3 特性 2 准备模板3 导入依赖4 图表生成工具类 ChartWithChineseExample步骤 1: 准备字体文件步骤 2: 注册字体到FontFactory步骤 3: 设置图表具体位置的字体柱状图:饼图:折线图:完整代码&#x…

Quectel EM05-CE 模块测试

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…