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

RabbitMQ消息模型之Routing-Direct

Routing Direct

在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。

在Direct模型下:

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
  • 消息的发送方在向 Exchange发送消息时,也必须指定消息的RoutingKey
  • Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的Routing key完全一致,才会接收到消息

image-20191126220145375

  • P:生产者,向Exchange发送消息,发送消息时,会指定一个routing key。
  • X:Exchange(交换机),接收生产者的消息,然后把消息递交给与routing key完全匹配的队列。
  • C1:消费者,其所在队列指定了需要routing key 为 error 的消息。
  • C2:消费者,其所在队列指定了需要routing key 为 info、error、warning 的消息。

创建生产者

public class MyProducer {@Testpublic void test() throws Exception {// 交换机String exchange = "logs_direct";// 创建工厂ConnectionFactory factory = new ConnectionFactory();factory.setVirtualHost("/");factory.setHost("xuewei.world");factory.setUsername("xuewei");factory.setPassword("123456");factory.setPort(5672);// 创建连接和通道Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 声明交换机channel.exchangeDeclare(exchange, "direct");for (int i = 0; i < 3; i++) {// 发布消息channel.basicPublish(exchange, "DEBUG", null, ("DEBUG LOG -> " + i).getBytes());channel.basicPublish(exchange, "INFO", null, ("INFO LOG -> " + i).getBytes());channel.basicPublish(exchange, "WARN", null, ("WARN LOG -> " + i).getBytes());channel.basicPublish(exchange, "ERROR", null, ("ERROR LOG -> " + i).getBytes());}}
}

创建消费者1

public class MyConsumer1 {public static void main(String[] args) throws Exception {// 指定交换机String exchange = "logs_direct";// 创建工厂ConnectionFactory factory = new ConnectionFactory();factory.setVirtualHost("/");factory.setHost("xuewei.world");factory.setUsername("xuewei");factory.setPassword("123456");factory.setPort(5672);// 创建连接和通道Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 绑定交换机channel.exchangeDeclare(exchange, "direct");// 创建临时队列String queue = channel.queueDeclare().getQueue();// 将临时队列绑定exchangechannel.queueBind(queue, exchange, "WARN");channel.queueBind(queue, exchange, "ERROR");// 处理消息channel.basicConsume(queue, true, new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("消费者1: " + new String(body));// TODO 业务处理}});}
}

创建消费者2

public class MyConsumer2 {public static void main(String[] args) throws Exception {// 指定交换机String exchange = "logs_direct";// 创建工厂ConnectionFactory factory = new ConnectionFactory();factory.setVirtualHost("/");factory.setHost("xuewei.world");factory.setUsername("xuewei");factory.setPassword("123456");factory.setPort(5672);// 创建连接和通道Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 绑定交换机channel.exchangeDeclare(exchange, "direct");// 创建临时队列String queue = channel.queueDeclare().getQueue();// 将临时队列绑定exchangechannel.queueBind(queue, exchange, "DEBUG");channel.queueBind(queue, exchange, "INFO");// 处理消息channel.basicConsume(queue, true, new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("消费者2: " + new String(body));// TODO 业务处理}});}
}

image-20220526182028082

相关文章:

RabbitMQ消息模型之Routing-Direct

Routing Direct 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下&#xff1a; 队列与交换机的绑定&#xff0c;不能是任意…...

Harmony 应用开发之size 脚本

作者&#xff1a;麦客奥德彪 在应用开发中&#xff0c;最终呈现在用户面前的UI&#xff0c;是用户能否继续使用应用的强力依据之一&#xff0c;在之前的开发中&#xff0c;Android 屏幕碎片化严重&#xff0c;所以出现了很多尺寸适配方案。 最小宽适配、百分比适配等等。 还有一…...

商家门店小程序怎么做?门店小程序的优势和好处

生活服务类商家在当前数字化时代&#xff0c;越来越认识到门店小程序的重要性。门店小程序不仅为商家提供了一个在线展示的窗口&#xff0c;更为其打造了一个与消费者直接互动的平台。有了门店小程序&#xff0c;商家可以更加便捷地管理商品信息、订单流程&#xff0c;同时还能…...

什么是灯塔工厂?灯塔工厂的作用?

什么是灯塔工厂&#xff1f; "灯塔工厂"概念源于德国的工业4.0战略&#xff0c;又称“工业4.0示范工厂”或“标杆工厂”&#xff0c;代表工业领域顶级的智能制造能力。2018年&#xff0c;由世界经济论坛和麦肯锡共同推出。 灯塔工厂是通过数字化、网络化和智能化手…...

【GEO-AI】SAM-Geo库(segment-geospatial)入门教程

今年4月份&#xff0c;Meta公布了它图形分割模型Segment-Anything&#xff0c;简称SAM。当时就想着这个东西用在遥感影像分割上应该效果不错&#xff0c;奈何自己能力有限&#xff0c;没有办法上手实践。偶然间看到有介绍SAM-Geo工具包的文章&#xff0c;决定研究一番&#xff…...

ESP32-Web-Server 实战编程-使用文件系统建立强大的 web 系统

ESP32-Web-Server 实战编程-使用文件系统建立强大的 web 系统 概述 在前述章节我们讲述了在网页端控制多个 GPIO 的案例。当程序开始变得复杂&#xff0c;让一些功能“自动起来”是一个好的选择。 在前面的示例中&#xff0c;我们需要在后端为每个前端代码的 URL 指定一个对…...

kubeadm快速搭建k8s高可用集群

1.安装及优化 1.1基本环境配置 1.环境介绍 &#xff08;1&#xff09;.高可用集群规划 主机名ip地址说明k8s-master01192.168.2.96master节点k8s-master02192.168.2.97master节点k8s-master03192.168.2.98master节点k8s-node01192.168.2.99node节点k8s-node02192.168.2.100n…...

GoLong的学习之路,进阶,Redis

这个redis和上篇rabbitMQ一样&#xff0c;在之前我用Java从原理上进行了剖析&#xff0c;这里呢&#xff0c;我做项目的时候&#xff0c;也需要用到redis&#xff0c;所以这里也将去从怎么用的角度去写这篇文章。 文章目录 安装redis以及原理redis概念redis的应用场景有很多red…...

Linux重置MySql密码(简洁版)

关闭验证 /etc/my.cnf-->[mysqld]-->skip-grant-tables 重启MySql service mysql restart 登陆MySql mysql -u root 刷新权限 FLUSH PRIVILEGES; 更新密码 ALTER USER rootlocalhost IDENTIFIED BY 123456; 退出MySql exit 打开验证 /etc/my.cnf-->[mysqld]-->skip…...

Ubuntu部署jmeter与ant

为了整合接口自动化的持续集成工具&#xff0c;我将jmeter与ant都部署在了Jenkins容器中&#xff0c;并配置了build.xml 一、ubuntu部署jdk 1&#xff1a;先下载jdk-8u74-linux-x64.tar.gz&#xff0c;上传到服务器&#xff0c;这里上传文件用到了ubuntu 下的 lrzsz。 ubunt…...

如何使用 RestTemplate 进行 Spring Boot 微服务通信示例?

在 Spring Boot 微服务架构中&#xff0c;RestTemplate 是一个强大的工具&#xff0c;用于简化微服务之间的通信。下面是一个简单的示例&#xff0c;演示如何使用 RestTemplate 进行微服务之间的 HTTP 通信。 首先&#xff0c;确保你的 Spring Boot 项目中已经添加了 spring-b…...

新开普掌上校园服务管理平台service.action RCE漏洞复现 [附POC]

文章目录 新开普掌上校园服务管理平台service.action RCE漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 新开普掌上校园服务管理平台service.action RCE漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿…...

滤波器、卷积核与内核的关系

上来先总结举例子解释 上来先总结 内核&#xff08;kernel&#xff09;是一个二维矩阵&#xff0c;长*宽&#xff1b;滤波器&#xff08;filter&#xff09;也叫卷积核&#xff0c;过滤器。是一个三维立方体&#xff0c;长 宽 深度&#xff0c; 其中深度便是由多少张内核构成…...

沉默是金,寡言为贵

​ 佛说&#xff1a;“人受一句话&#xff0c;佛受一柱香。”佛教的十善&#xff0c;其中有关口德就占了四样&#xff1a;恶口、妄语、两舌、绮语&#xff0c;可见口德是很重要的。言为心声&#xff0c;能说出真心的话&#xff0c;必然好听&#xff1b;假如说话言不由衷&#x…...

【网络奇遇之旅】:那年我与计算机网络的初相遇

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 计算机网络 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 一. 前言二. 计算机网络的定义三. 计算机网络的功能3.1 资源共享3.2 通信功能3.3 其他功能 四. 计算机网络…...

量化误差的测量

因为转换的精度有限&#xff0c;所以将模拟值数字化时会不可避免地出现量化误差。量化误差由转换器及其误差、噪声和非线性度决定。当输入信号和计数器时基有区别时就会产生量化误差。根据输入信号的相位和计数器时基的匹配程度&#xff0c;计数器有下列三种可能性&#xff1a;…...

8年测试工程师分享,我是怎么开展性能测试的(基础篇)

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…...

微服务API网关Spring Cloud Gateway实战

概述 微服务网关是为了给不同的微服务提供统一的前置功能&#xff1b;网关服务可以配置集群&#xff0c;以承载更多的流量&#xff1b;负载均衡与网关互相成就&#xff0c;一般使用负载均衡&#xff08;例如 nginx&#xff09;作为总入口&#xff0c;然后将流量分发到多个网关…...

uniapp打包ios有时间 uniapp打包次数

我们经常用的解决方案有,分包,将图片上传到服务器上,减少插件引入。但是还有一个方案好多刚入门uniapp的人都给忽略了,就是在源码视图中配置,开启分包优化。 1.分包 目前微信小程序可以分8个包,每个包的最大存储是2M,也就是说你文件总体的大小不能超过16M,每个包的大…...

【笔记+代码】JDK动态代理理解

代码地址 https://github.com/cmdch2017/JDKproxy.git/ 我的理解 我的理解是本身service-serviceImpl结构&#xff0c;新增一个代理对象proxy&#xff0c;代理对象去直接访问serviceImpl&#xff0c;在proxy进行事务的增强操作&#xff0c;所以代理对象实现了接口。如何实现…...

Webfunny前端监控系统安全防护终极指南:SQL注入防护与API鉴权最佳实践

Webfunny前端监控系统安全防护终极指南&#xff1a;SQL注入防护与API鉴权最佳实践 【免费下载链接】webfunny_monitor 【免费社区版】【企业版】Webfunny是一款集全链路监控和埋点系统于一体的大数据分析系统&#xff0c;我们致力于解决线上的疑难杂症和精细化分析业务数据&…...

GLM-OCR效果展示:复杂版式、表格、公式识别案例全解析

GLM-OCR效果展示&#xff1a;复杂版式、表格、公式识别案例全解析 1. 专业级OCR的新标杆 在文档数字化处理领域&#xff0c;传统OCR技术往往在遇到复杂版式、数学公式或嵌套表格时束手无策。GLM-OCR的出现彻底改变了这一局面——这个轻量级多模态OCR模型在权威文档解析基准测…...

UniApp扫码插件选型指南:从MLKit极速识别到ZXing经典方案的实战解析

1. UniApp扫码插件选型核心考量因素 当你需要在UniApp项目中集成扫码功能时&#xff0c;面对市面上五花八门的插件往往会陷入选择困难。作为经历过多个商业项目的老手&#xff0c;我建议从以下几个维度进行考量&#xff1a; 识别速度是最直观的体验指标。实测数据显示&#xff…...

忍者像素绘卷部署教程:Ubuntu 22.04+PyTorch 2.1环境完整搭建步骤

忍者像素绘卷部署教程&#xff1a;Ubuntu 22.04PyTorch 2.1环境完整搭建步骤 1. 环境准备与系统要求 在开始部署忍者像素绘卷之前&#xff0c;请确保您的系统满足以下最低要求&#xff1a; 操作系统&#xff1a;Ubuntu 22.04 LTS&#xff08;推荐&#xff09;或更高版本显卡…...

Linux实现简易版Shell的代码详解

一、程序流程分析我们日常使用Bash时&#xff0c;通过输入命令执行相应的操作&#xff0c;比如&#xff1a;那么&#xff0c;Bash是如何进行工作的呢&#xff1f;观察一下&#xff0c;就会发现&#xff0c;首先Bash会打印命令行提示符&#xff0c;包括当前用户、主机名以及路径…...

工具使用指南:提升效率的关键方法与实践

在信息爆炸的今天&#xff0c;我们接触到的数字工具数量呈指数级增长。从文档处理到图像编辑&#xff0c;从项目管理到团队协作&#xff0c;各类工具层出不穷。然而&#xff0c;一个普遍现象是&#xff1a;许多人工具越装越多&#xff0c;效率却并未显著提升。问题的根源往往不…...

从开发到安全:SpringBoot/Struts2/Laravel框架那些“第三方组件”挖出的坑,你的项目踩中了吗?

第三方组件安全黑洞&#xff1a;主流开发框架中那些被忽视的高危依赖 当我们在讨论框架安全时&#xff0c;往往聚焦于SpringBoot、Laravel等核心框架本身&#xff0c;却忽略了那些如影随形的第三方组件。这些"搭便车"的依赖项&#xff0c;正成为企业应用安全的阿喀琉…...

jcmd-jvm

jcmd 命令详解 什么是 jcmd jcmd 是 JDK 7 引入的一个命令行工具&#xff0c;用于向正在运行的 JVM 发送诊断命令。它是一个功能强大的工具&#xff0c;整合了之前多个 JVM 工具&#xff08;如 jstack、jinfo、jmap 等&#xff09;的功能&#xff0c;提供了统一的接口来管理和监…...

谷歌启用天然气电厂为AI数据中心供电,气候承诺大转弯

谷歌已与一家天然气发电厂达成合作伙伴关系&#xff0c;为其在德克萨斯州的数据中心提供电力&#xff0c;这一消息由最新研究发现并得到公司确认。此举标志着这家科技巨头立场的重大转变&#xff0c;该公司曾承诺在2030年前实现碳中和&#xff0c;长期以来被视为清洁能源的先驱…...

通过 C# 将 RTF 格式转换为 Word 文档

在 .NET 项目中处理文档格式转换时&#xff0c;RTF 转 Word 是一个常见的需求。RTF&#xff08;Rich Text Format&#xff09;作为一种跨平台的文档格式&#xff0c;常被用作中间载体&#xff0c;而最终交付时往往需要转换为更通用的 Word 格式&#xff08;.doc 或 .docx&#…...