当前位置: 首页 > news >正文

Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程

direct关键字发布订阅模式

基本用法

发布者

import json
from rabbitmq import pika
import rabbitmq# 建立连接
credentials = rabbitmq.PlainCredentials('zhangdapeng','zhangdapeng520',
)  # mq用户名和密码
connection_target = rabbitmq.ConnectionParameters(host='127.0.0.1',port=5672,virtual_host='/',credentials=credentials,
)
connection = rabbitmq.BlockingConnection(connection_target)# 队列信息
exchange_name = "user_manager_direct"# 创建管道
channel = connection.channel()# 声明一个交换机
channel.exchange_declare(exchange=exchange_name, exchange_type=rabbitmq.ExchangeType.direct)# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
message = json.dumps(user, ensure_ascii=True)
channel.basic_publish(exchange=exchange_name,routing_key="error",  # 这里不再是队列名了,而是关键字body=message.encode('utf8'),properties=pika.BasicProperties(delivery_mode=2),  # 声明消息在队列中持久化
)
channel.basic_publish(exchange=exchange_name,routing_key="info",  # 这里不再是队列名了,而是关键字body=message.encode('utf8'),properties=pika.BasicProperties(delivery_mode=2),  # 声明消息在队列中持久化
)
print(message)# 关闭连接
connection.close()

消费者

import rabbitmq
import json# 创建连接
credentials = rabbitmq.PlainCredentials('zhangdapeng','zhangdapeng520',
)
target = rabbitmq.ConnectionParameters(host='127.0.0.1',port=5672,virtual_host='/',credentials=credentials,
)
connection = rabbitmq.BlockingConnection(target)# 创建管道
channel = connection.channel()# 队列信息
exchange_name = "user_manager_direct"# 绑定交换机
channel.exchange_declare(exchange=exchange_name,exchange_type=rabbitmq.ExchangeType.direct,
)# 绑定队列
result = channel.queue_declare(queue="",  # 这里不要指定队列名exclusive=True,
)
queue_name = result.method.queue  # 通过result获取队列名
channel.queue_bind(exchange=exchange_name,queue=queue_name,routing_key="error",  # 可以通过routing_key绑定多个关键字
)
channel.queue_bind(exchange=exchange_name,queue=queue_name,routing_key="info",  # 可以通过routing_key绑定多个关键字
)def callback(ch, method, properties, body):"""每次接收到消息的消费回调方法"""ch.basic_ack(delivery_tag=method.delivery_tag)data = body.decode("utf8")print(json.loads(data))# 开始消费
channel.basic_consume(queue=queue_name,on_message_callback=callback,auto_ack=False,
)
try:channel.start_consuming()
finally:connection.close()

简化代码

生产者

import json
from rabbitmq import pika
import rabbitmq# 建立连接
connection = rabbitmq.get_connection()# 队列信息
exchange_name = "user_manager_direct"# 创建管道
channel = connection.channel()# 声明一个交换机
channel.exchange_declare(exchange=exchange_name, exchange_type=rabbitmq.ExchangeType.direct)# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
rabbitmq.send_json(channel, user, exchange_name, "error")
rabbitmq.send_json(channel, user, exchange_name, "info")# 关闭连接
connection.close()

消费者

import rabbitmq
import json# 创建连接
connection = rabbitmq.get_connection()# 创建管道
channel = connection.channel()# 队列信息
exchange_name = "user_manager_direct"# 绑定交换机
channel.exchange_declare(exchange=exchange_name,exchange_type=rabbitmq.ExchangeType.direct,
)# 绑定队列
result = channel.queue_declare(queue="",  # 这里不要指定队列名exclusive=True,
)
queue_name = result.method.queue  # 通过result获取队列名
channel.queue_bind(exchange=exchange_name,queue=queue_name,routing_key="error",  # 可以通过routing_key绑定多个关键字
)
channel.queue_bind(exchange=exchange_name,queue=queue_name,routing_key="info",  # 可以通过routing_key绑定多个关键字
)def callback(ch, method, properties, body):"""每次接收到消息的消费回调方法"""print(rabbitmq.receive_json(ch, method, body))# 开始消费
rabbitmq.consume(connection, queue_name, callback)

进一步简化代码

生产者

import rabbitmq# 建立连接
connection = rabbitmq.get_connection()# 队列信息
exchange_name = "user_manager_direct"# 创建管道
channel, _ = rabbitmq.get_direct_channel(connection, exchange_name)# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
rabbitmq.send_json(channel, user, exchange_name, "error")
rabbitmq.send_json(channel, user, exchange_name, "info")# 关闭连接
connection.close()

消费者

import rabbitmq
import json# 创建连接
connection = rabbitmq.get_connection()# 队列信息
exchange_name = "user_manager_direct"# 创建管道
channel, queue_name = rabbitmq.get_direct_channel(connection, exchange_name, ["error", "info"])def callback(ch, method, properties, body):"""每次接收到消息的消费回调方法"""print(rabbitmq.receive_json(ch, method, body))# 开始消费
rabbitmq.consume(connection, queue_name, callback)

相关文章:

Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程

direct关键字发布订阅模式 基本用法 发布者 import json from rabbitmq import pika import rabbitmq# 建立连接 credentials rabbitmq.PlainCredentials(zhangdapeng,zhangdapeng520, ) # mq用户名和密码 connection_target rabbitmq.ConnectionParameters(host127.0.0.…...

如何应用数据图表了解家里的 Unifi 网络状况?

1. 前言 自从之前写了《【让 IT 更简单】使用 Ubiquiti 全家桶对朋友家进行网络改造》 《【Rethinking IT】如何结合 Unifi 和 MikroTik 设备打造家庭网络》两篇文章后,相信给各位正在用 Unifi 或者打算使用 Unifi 的朋友应该有所帮助。 那么,今天我就…...

新版K8s:v1.28拉取Harbor仓库镜像以及本地镜像(docker弃用改用containerd,纯纯踩坑)

目录 一、项目概述二、环境三、项目样式Harborkuboard运行样式 四、核心点Harbor安装config.toml文件修改(containerd)ctr、nerdctl相关命令kuboard工作负载 五、总结 一、项目概述 使用Kuboard作为k8s集群的管理平台,Harbor作为镜像仓库,拉取Harbor镜像…...

Unity URP切换品质和Feature开关的性能问题

现在对我的项目进行安卓端发布,需要切换品质和一些Feature开关。 我是这样做的。 划分品质 首先Renerer分为2个Android和PC,图中其他不用参考。 每个副本的URP Asset分为pc和android,例如图中的 hall和hall_android。 我们可以看到hall用的…...

jmeter解决返回unicode编辑

一般乱码有两种方法来解决: 1、修改配置文件jmeter.properties中默认编码格式ISO-8859-1(不支持中文),修改为utf-8 sampleresult.default.encoding utf-82、添加BeanShell PostProcessor加入 prev.setDataEncoding("utf-8")3、还有一种返回…...

C# 基础入门

第二章 C# 语法基础 2-1 C# 中的关键字 关键字,是一些被C#规定了用途的重要单词。 在Visual Studio的开发环境中,关键字被标识为蓝色,下图代码中,用红方框圈出的单词就是关键字。 关键字 class ,这个关键字的用途是…...

PHP 支付宝(单笔转账到银行账户接口)

alipay.fund.trans.tobank.transfer(单笔转账到银行账户接口) 小程序文档 - 支付宝文档中心 一、下载支付宝SDK,现有版本v1、v2、v3 https://github.com/alipay/alipay-sdk-php-all github 慢的话,DNS 直达即可 140.82.112.3 github.com 【host文…...

【Java万花筒】Java安全卫士:从密码学到Web应用攻击

Java安全锦囊:从Web应用攻击到加密算法,助你建立强固的开发堡垒 前言 在当今数字化时代,安全性至关重要,特别是对于Java开发者而言。本文将深入探讨Java安全与加密领域的关键库和技术,包括Bouncy Castle、Jasypt、Ke…...

redis安装-Linux为例

可以下载一个Shell或者MobaXterm工具,便于操作 在redis官网下载压缩包 开始安装 安装依赖 yum install -y gcc tcl切换目录 切换目录后直接把redis安装包拖到/user/local/src/下 cd /user/local/src/解压然后安装 #解压 tar -zxvf redis-7.2.4.tar.gz #安装 …...

iOS长按时无法保存图片问题解决方案

在使用iOS设备的用户中,相信很多人都有过在浏览网页时遇到长按时无法保存图片的困扰。这主要是因为网页开发者为了保护版权或隐私,默认屏蔽掉了图片长按时保存的功能。 具体来说,问题出在-webkit-touch-callout这个CSS属性上。这个属性用于定…...

Datawhale 强化学习笔记(一)

参考 在线阅读文档 github 教程 开源框架 JoyRL datawhalechina/joyrl: An easier PyTorch deep reinforcement learning library. (github.com) 策略梯度算法的两种不同的推导版本。 强化学习中的一些核心问题,比如优化值的估计、解决探索与利用等问题。 从传统强…...

首届PolarDB开发者大会在京举办,阿里云李飞飞:云数据库加速迈向智能化

1月17日,阿里云PolarDB开发者大会在京举办,中国首款自研云原生数据库PolarDB发布“三层分离”新版本,基于智能决策实现查询性能10倍提升、节省50%成本。此外,阿里云全新推出数据库场景体验馆、训练营等系列新举措,广大…...

003-90-15【SparkSQLDFDS】慈航寺庙山脚下八卦田旁油菜花海深处人家王大爷家女儿用GPT学习DataSet的基本操作

003-90-14【SparkSQL&DF&DS】慈航寺庙山脚下八卦田旁油菜花海深处人家王大爷家女儿用GPT学习DataSet的基本操作 【SparkSQL&DF&DS】Dataset 的创建和使用 【SparkSQL&DF&DS】2,Dataset 的创建和使用1, 创建2, show3, map4, as5, select6 f…...

代码随想录-刷题第五十七天

42. 接雨水 题目链接:42. 接雨水 思路:本题十分经典,使用单调栈需要理解的几个问题: 首先单调栈是按照行方向来计算雨水,如图: 使用单调栈内元素的顺序 从大到小还是从小到大呢? 从栈头&…...

flutter 播放SVGA动图

SVGAPlayer-Flutter:这是一个轻量级的动画渲染库,可以通过Flutter CustomPainter原生渲染动画,为您带来高性能,低成本的动画体验123。 您可以按照以下步骤使用 SVGAPlayer-Flutter 插件: 1.在 pubspec.yaml 文件中添…...

鸿蒙开发软件汉化

一、打开设置 File>Settings>Plugins>Marketplace,输入Chinese搜索插件(有的人是搜不到的),但别慌,选择Marketplace傍边的 Installed 按钮,里面就有Chinese插件(如果搜索出来的东西比较多往下就可…...

Three.js Tri-panner (三面贴图) 材质 两种实现方式

文章目录 介绍自定义shaderNodeMaterial骨骼材质特殊处理 介绍 Tri-panner 在babylonjs中有支持 但是three.js目前的基础材质并不支持 需要自己定义shader 或者使用目前还没有什么完善的文档的 NodeMaterial 下面展示两种实现方式 自定义shader /*** description: 替换三角面…...

Docker部署Flask项目

Docker部署Flask项目 一、准备项目代码二、编写Dockerfile三、服务器部署 一、准备项目代码 这里写了一个简单的Flask的demo&#xff0c;源代码如下&#xff1a; from flask import Flaskapp Flask(__name__)app.route("/") def index():return "<h1 styl…...

Git将某个文件合并到指定分支

企业开发中&#xff0c;经常会单独拉分支去做自己的需求开发&#xff0c;但是某些时候一些公共的配置我们需要从主线pull&#xff0c;这时候整个分支merge显然不合适 1.切换至待合并文件的分支 git checkout <branch>2.将目标分支的单个文件合并到当前分支 git checkou…...

Dockerfile构建镜像以及阿里云上传

前言 我们在使用docker部署微服务项目的时候会发现这样一个问题&#xff1a;每个服务构建出的镜像文件都很大&#xff0c;几百M&#xff0c;有些原始镜像也已经占据了很多内存了... 这种大的镜像往往都会导致迁移的速度变慢。其实我们启动容器主要最需要的镜像是jdk&#xff0…...

免费开源策略卡牌:如何在无名杀中创造你的专属三国战场

免费开源策略卡牌&#xff1a;如何在无名杀中创造你的专属三国战场 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 在当今数字游戏世界中&#xff0c;有一款独特的开源策略卡牌游戏正悄然改变着玩家与游戏的关系。这款名为"无…...

别再只用总基尼系数了!用Python实现Dagum分解,看清区域差距的‘里子’

用Python拆解经济差距&#xff1a;Dagum基尼系数分解实战指南 当一份区域经济报告只给出一个总的基尼系数时&#xff0c;就像医生只告诉你"体温偏高"却不说明是哪个器官发炎——数据研究者常陷入这种诊断困境。传统基尼系数虽能反映整体不平等程度&#xff0c;却无法…...

LPC11U24内部EEPROM原理与高可靠写入实践

1. LPC11U24 内部EEPROM技术深度解析与工程实践指南LPC11U24是NXP&#xff08;恩智浦&#xff09;推出的基于ARM Cortex-M0内核的低成本、低功耗32位微控制器&#xff0c;广泛应用于工业控制、消费电子和物联网终端节点。其片上集成的1024字节内部EEPROM&#xff08;Electrical…...

如何快速上手MOOTDX:Python量化分析者的通达信数据完整实战手册

如何快速上手MOOTDX&#xff1a;Python量化分析者的通达信数据完整实战手册 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX是一个专门为Python开发者设计的通达信数据接口封装库&#xff0…...

深度解析:PaperZZ AI 如何把 “文献综述难产” 变成 “10 分钟定稿”?

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿/期刊论文paperzz - 文献综述https://www.paperzz.cc/journalsReviewed 提到本科毕业论文&#xff0c;比起提笔写正文&#xff0c;绝大多数同学的噩梦都是文献综述。这不仅是论文的开篇&#xff0c;更是评判…...

Tomcat安全防护指南:如何防御CVE-2017-12615和CNVD-2020-10487漏洞攻击

Tomcat安全防护实战&#xff1a;从漏洞原理到企业级防御体系构建 最近在帮某金融客户做安全审计时&#xff0c;发现他们的Tomcat服务器竟然还开着AJP端口&#xff0c;而且管理后台用的还是默认密码。这让我想起去年处理过的一次安全事件——攻击者仅用3小时就通过CVE-2017-1261…...

吃透Linux/C++系统编程:文件与I/O操作从入门到避坑

合集 - LLM应用实战(17) 1. LLM应用实战&#xff1a;当KBQA集成LLM(二) 2024-04-25 2. LLM应用实战&#xff1a;当KBQA集成LLM 2024-04-11 3. LLM实战&#xff1a;LLM微调加速神器-Unsloth LLama3 2024-05-14 4. LLM实战&#xff1a;LLM微调加速神器-Unsloth Qwen1.5 2024-05…...

避开FPGA时序分析盲区:除了Clock和Data,别忘了用Set_Data_Check给你的控制信号也上个‘闹钟’

避开FPGA时序分析盲区&#xff1a;控制信号的隐藏时序风险与Set_Data_Check实战 在FPGA设计的世界里&#xff0c;时序约束就像交通信号灯&#xff0c;确保数据在复杂的逻辑网络中安全有序地流动。大多数工程师对时钟和数据信号之间的时序关系了如指掌&#xff0c;却常常忽视了一…...

快速掌握socat-windows:实用网络数据转发工具完全指南

快速掌握socat-windows&#xff1a;实用网络数据转发工具完全指南 【免费下载链接】socat-windows unofficial windows build of socat http://www.dest-unreach.org/socat/ 项目地址: https://gitcode.com/gh_mirrors/so/socat-windows socat-windows是一款功能强大的跨…...

3个AI工具如何提升动态图像质量?专业级画质增强全攻略

3个AI工具如何提升动态图像质量&#xff1f;专业级画质增强全攻略 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/…...