RabbitMQ:python基础调用

前言

        紧接上回在windows上安装了最新版的RabbitMQ:

        RabbitMQ:windows最新版本4.0.5安装方案-CSDN博客

        这是官方给出的使用文档:How to Use RabbitMQ | RabbitMQ 

        这里我给出通过AI学习到的python使用方法 

理论截图 

        python直接使用pip安装pika模块即可开始使用RabbitMQ: 

pip install pika

        常用需要实现的队列模式

 

代码实现 

        话不多说,直接上代码 

        1、连接和关闭RabbitMQ服务 

import pika# 创建连接
# 使用自定义的用户名和密码连接到 RabbitMQ
credentials = pika.PlainCredentials('manfish', '52manfish')
connection_params = pika.ConnectionParameters(host='localhost',  # RabbitMQ 服务器的主机名port=5672,         # RabbitMQ 的默认端口virtual_host='manfish',  # 虚拟主机名称credentials=credentials  # 认证凭证
)connection = pika.BlockingConnection(connection_params)
channel = connection.channel()# 声明队列json_queue
queue_name = 'json_queue'
channel.queue_declare(queue=queue_name)# 关闭连接
connection.close()

        注意:当不填写账号密码时,模块将自动以guest管理员默认账密(guest/guest)连接,不建议养成这种习惯

        另:用户需要使用相同虚拟主机传递队列消息

        这里是webui上设置账密及分配虚拟主机的截图:

 

        2、直接队列

        消费者

 

import pika
import json# 创建连接
# 使用自定义的用户名和密码连接到 RabbitMQ
credentials = pika.PlainCredentials('manfish1', '123456')
connection_params = pika.ConnectionParameters(host='localhost',  # RabbitMQ 服务器的主机名port=5672,         # RabbitMQ 的默认端口virtual_host='manfish1',  # 虚拟主机名称credentials=credentials  # 认证凭证
)connection = pika.BlockingConnection(connection_params)
channel = connection.channel()# 声明队列
queue_name = 'json_queue'
channel.queue_declare(queue=queue_name)# 定义回调函数
def callback(ch, method, properties, body):print('------- get a msg -------')# 将 JSON 字符串反序列化为 Python 对象message_data = json.loads(body)print(f" [x] Received JSON message: {message_data}")# 打印 method 参数的详细信息print(f" [x] Delivery tag: {method.delivery_tag}")print(f" [x] Exchange: {method.exchange}")print(f" [x] Routing key: {method.routing_key}")print(f" [x] Redelivered: {method.redelivered}")# 打印 properties 参数的详细信息print(f" [x] Correlation ID: {properties.correlation_id}")print(f" [x] Content type: {properties.content_type}")print(f" [x] Headers: {properties.headers}")print(f" [x] Message ID: {properties.message_id}")print(f" [x] Timestamp: {properties.timestamp}")print(f" [x] User ID: {properties.user_id}")print(f" [x] App ID: {properties.app_id}")# 开始消费
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=True)print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
        生产者 
import pika
import json# 创建连接
credentials = pika.PlainCredentials('manfish', '123456')
connection_params = pika.ConnectionParameters(host='localhost',  # RabbitMQ 服务器的主机名port=5672,         # RabbitMQ 的默认端口virtual_host='manfish1',  # 虚拟主机名称credentials=credentials  # 认证凭证
)connection = pika.BlockingConnection(connection_params)
channel = connection.channel()# 声明队列
queue_name = 'json_queue'
channel.queue_declare(queue=queue_name)# 创建一个 Python 字典
message_data = {'name': 'Alice','age': 30,'city': 'New York'
}# 将字典转换为 JSON 字符串
message = json.dumps(message_data)# 发送 JSON 数据
channel.basic_publish(exchange='',routing_key=queue_name,body=message
)
print(f" [x] Sent JSON message: {message}")# 关闭连接
connection.close()
        截图 

 

     3、主题队列

        消费者
import pika
import json# 创建连接
# 使用自定义的用户名和密码连接到 RabbitMQ
credentials = pika.PlainCredentials('manfish1', '123456')
connection_params = pika.ConnectionParameters(host='localhost',  # RabbitMQ 服务器的主机名port=5672,         # RabbitMQ 的默认端口virtual_host='manfish1',  # 虚拟主机名称credentials=credentials  # 认证凭证
)connection = pika.BlockingConnection(connection_params)
channel = connection.channel()# 声明交换机
exchange_name = 'topic_exchange'
channel.exchange_declare(exchange=exchange_name, exchange_type='topic')# 声明队列
result = channel.queue_declare('', exclusive=True)
queue_name = result.method.queue# 绑定队列到交换机
binding_key = 'user.*'
channel.queue_bind(exchange=exchange_name,queue=queue_name,routing_key=binding_key
)# 定义回调函数
def callback(ch, method, properties, body):print('------- get a msg -------')print(f" [x] Received message: {body}")# 打印 method 参数的详细信息print(f" [x] Delivery tag: {method.delivery_tag}")print(f" [x] Exchange: {method.exchange}")print(f" [x] Routing key: {method.routing_key}")print(f" [x] Redelivered: {method.redelivered}")# 打印 properties 参数的详细信息print(f" [x] Correlation ID: {properties.correlation_id}")print(f" [x] Content type: {properties.content_type}")print(f" [x] Headers: {properties.headers}")print(f" [x] Message ID: {properties.message_id}")print(f" [x] Timestamp: {properties.timestamp}")print(f" [x] User ID: {properties.user_id}")print(f" [x] App ID: {properties.app_id}")# 确认消息ch.basic_ack(delivery_tag=method.delivery_tag)# 开始消费
# auto_ack为True时自动确认消息,但既为True又在回调中使用了ch.basic_ack(),则会导致报错——重复确认
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=False)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
        生产者 
import timeimport pika
import json# 创建连接
credentials = pika.PlainCredentials('manfish', '123456')
connection_params = pika.ConnectionParameters(host='localhost',  # RabbitMQ 服务器的主机名port=5672,         # RabbitMQ 的默认端口virtual_host='manfish1',  # 虚拟主机名称credentials=credentials  # 认证凭证
)connection = pika.BlockingConnection(connection_params)
channel = connection.channel()# 声明交换机
exchange_name = 'topic_exchange'
channel.exchange_declare(exchange=exchange_name, exchange_type='topic')# 发送消息
routing_key = 'user.login'
message = 'User logged in.'
channel.basic_publish(exchange=exchange_name,routing_key=routing_key,body=message,)
print(f" [x] Sent message: {message}")# 关闭连接
connection.close()
        截图 

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

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

相关文章

【多线程】线程池核心数到底如何配置?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…

【LeetCode】5. 贪心算法:买卖股票时机

太久没更了,抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…

蓝桥杯思维训练营(三)

文章目录 题目详解680.验证回文串 II30.魔塔游戏徒步旅行中的补给问题观光景点组合得分问题 题目详解 680.验证回文串 II 680.验证回文串 II 思路分析:这个题目的关键就是,按照正常来判断对应位置是否相等,如果不相等,那么就判…

DeepSeek大模型介绍、本地化部署与使用!【AI大模型】

一、DeepSeek 是什么? 1.技术定位 专注大模型与AGI研究,开发高性能基座模型(如 DeepSeek LLM 系列),支持长文本、多模态、代码生成等复杂任务。 提供开源模型(如 DeepSeek-MoE、DeepSeek-V2)…

YK人工智能(六)——万字长文学会基于Torch模型网络可视化

1. 可视化网络结构 随着深度神经网络做的的发展,网络的结构越来越复杂,我们也很难确定每一层的输入结构,输出结构以及参数等信息,这样导致我们很难在短时间内完成debug。因此掌握一个可以用来可视化网络结构的工具是十分有必要的…

React+AI 技术栈(2025 版)

文章目录 核心:React TypeScript元框架:Next.js样式设计:Tailwind CSSshadcn/ui客户端状态管理:Zustand服务器状态管理:TanStack Query动画效果:Motion测试工具表格处理:TanStack Table表单处理…

控件【QT】

文章目录 控件QWidgetenabledgeometrysetGeometry qrcwindowOpacityQPixmapfonttoolTipfocusPolicystyleSheetQPushButtonRadio ButtionCheck Box显示类控件QProgressBarcalendarWidget 控件 Qt中已经提供了很多内置的控件了(按钮,文本框,单选按钮,复选按钮,下拉框…

苹果再度砍掉AR眼镜项目?AR真的是伪风口吗?

曾经,AR游戏一度异常火热,宝可梦go让多少人不惜翻墙都要去玩,但是也没过去几年,苹果被曝出再度砍掉了AR眼镜项目,面对着市场的变化,让人不禁想问AR真的是伪风口吗? 一、苹果再度砍掉AR眼镜项目&…

《redis4.0 通信模块源码分析(一)》

【redis导读】redis作为一款高性能的内存数据库,面试服务端开发,redis是绕不开的话题,如果想提升自己的网络编程的水平和技巧,redis这款优秀的开源软件是很值得大家去分析和研究的。 笔者从大学毕业一直有分析redis源码的想法&…

日期选择控件,时间跨度最大一年。

<el-date-picker v-model"times" type"daterange" unlink-panels :picker-options"pickerOptions" :range-separator"$lang(至)":start-placeholder"$lang(开始)" :end-placeholder"$lang(结束)" :default-tim…

JDK9新特性

文章目录 新特性&#xff1a;1.模块化系统使用模块化module-info.java&#xff1a;exports&#xff1a;opens&#xff1a;requires&#xff1a;provides&#xff1a;uses&#xff1a; 2.JShell启动Jshell执行计算定义变量定义方法定义类帮助命令查看定义的变量&#xff1a;/var…

Vue Router 客户端路由解决方案:axios 响应拦截(跳转到登录页面)

文章目录 引言客户端路由 vs. 服务端路由简单的路由案例术语I Vue Router 提供的组件RouterLinkRouterViewII 创建路由器实例调用 createRouter() 函数创建路由选项III 注册路由器插件通过调用 use() 来完成注册路由器插件的职责对于组合式 API,Vue Router 给我们提供了一些组…

在游戏本(6G显存)上本地部署Deepseek,运行一个14B大语言模型,并使用API访问

在游戏本6G显存上本地部署Deepseek&#xff0c;运行一个14B大语言模型&#xff0c;并使用API访问 环境说明环境准备下载lmstudio运行lmstudio 下载模型从huggingface.co下载模型 配置模型加载模型测试模型API启动API服务代码测试 deepseek在大语言模型上的进步确实不错&#xf…

【Uniapp-Vue3】创建DB schema数据表结构

右键uniCloud文件下的database文件&#xff0c;点击“新建DB schema”&#xff0c;选择模板&#xff0c;修改文件名&#xff0c;点击“创建” 创建完成后会出现对应的文件&#xff0c;进入该文件进行配置 对文件中的必填选项&#xff0c;用户权限&#xff0c;字段进行配置 其…

1-ET框架开发环境与demo运行

所需开发环境 安装Unity模块时&#xff0c;记得安装windows Build Support&#xff08;IL2CPP&#xff09;&#xff0c;否则打包会出问题。 安装visual studio&#xff0c;因为需要安装开发组件&#xff0c;需要选择 下载MongoDB7.0.2并安装 确认MongoDB安装成功 查看计算机…

CTP查询资金费率和手续费没响应

CTP的OnRspQryInstrumentOrderCommRate()和OnRspQryInstrumentCommissionRate()和手续费率和手续费有关系&#xff0c;但是今天我通过重写这两个方法&#xff0c;并且调用ReqQryInstrumentCommissionRate()后没响应&#xff0c;查了半天发现&#xff0c;我应该把响应函数实现写…

Python爬虫实战:一键采集电商数据,掌握市场动态!

电商数据分析是个香饽饽&#xff0c;可市面上的数据采集工具要不贵得吓人&#xff0c;要不就是各种广告弹窗。干脆自己动手写个爬虫&#xff0c;想抓啥抓啥&#xff0c;还能学点技术。今天咱聊聊怎么用Python写个简单的电商数据爬虫。 打好基础&#xff1a;搞定请求头 别看爬虫…

Page Assist实现deepseek离线部署的在线搜索功能

前面文章Mac 基于Ollama 本地部署DeepSeek离线模型 实现了deepseek的离线部署&#xff0c;但是部署完成虽然可以进行问答和交互&#xff0c;也有thinking过程&#xff0c;但是没办法像官方一样进行联网搜索。今天我们介绍一款浏览器插件Page Assist来实现联网搜索&#xff0c;完…

Qt跨屏窗口的一个Bug及解决方案

如果我们希望一个窗口覆盖用户的整个桌面&#xff0c;此时就要考虑用户有多个屏幕的场景&#xff08;此窗口要横跨多个屏幕&#xff09;&#xff0c;由于每个屏幕的分辨率和缩放比例可能是不同的&#xff0c;Qt底层在为此窗口设置缩放比例&#xff08;DevicePixelRatio&#xf…

AI绘画:解锁商业设计新宇宙(6/10)

1.AI 绘画&#xff1a;商业领域的潜力新星 近年来&#xff0c;AI 绘画技术以惊人的速度发展&#xff0c;从最初简单的图像生成&#xff0c;逐渐演变为能够创造出高度逼真、富有创意的艺术作品。随着深度学习算法的不断优化&#xff0c;AI 绘画工具如 Midjourney、Stable Diffu…