RabbitMQ养成记 (5. MQ的topics模式)

news2024/11/25 7:10:44

主题模式

Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符!

Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert

通配符规则:

​ #:匹配一个或多个词

​ *:匹配不多不少恰好1个词

举例:

​ audit.#:能够匹配audit.irs.corporate 或者 audit.irs

​ audit.*:只能匹配audit.irs

在这里插入图片描述
生产者:
使用topic类型的Exchange,发送消息的routing key有3种: item.isnert、item.update、item.delete:

public class Send {
    private final static String EXCHANGE_NAME = "topic_exchange_test";

    public static void main(String[] argv) throws Exception {
        // 获取到连接
        Connection connection = ConnectionUtil.getConnection();
        // 获取通道
        Channel channel = connection.createChannel();
        // 声明exchange,指定类型为topic
        channel.exchangeDeclare(EXCHANGE_NAME, "topic");
        // 消息内容
        String message = "新增商品 : id = 1001";
        // 发送消息,并且指定routing key 为:insert ,代表新增商品
        channel.basicPublish(EXCHANGE_NAME, "item.insert", null, message.getBytes());
        System.out.println(" [商品服务:] Sent '" + message + "'");

        channel.close();
        connection.close();
    }
}

消费者

public class Recv {
    private final static String QUEUE_NAME = "topic_exchange_queue_1";
    private final static String EXCHANGE_NAME = "topic_exchange_test";

    public static void main(String[] argv) throws Exception {
        // 获取到连接
        Connection connection = ConnectionUtil.getConnection();
        // 获取通道
        Channel channel = connection.createChannel();
        // 声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        
        // 绑定队列到交换机,同时指定需要订阅的routing key。需要 update、delete
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "item.update");
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "item.delete");

        // 定义队列的消费者
        DefaultConsumer consumer = new DefaultConsumer(channel) {
            // 获取消息,并且处理,这个方法类似事件监听,如果有消息的时候,会被自动调用
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                    byte[] body) throws IOException {
                // body 即消息体
                String msg = new String(body);
                System.out.println(" [消费者1] received : " + msg + "!");
            }
        };
        // 监听队列,自动ACK
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

注意
这里大家要理解一个点。
就是 创建队列/ 然后把队列和交换机 绑定 。 以通配符的方式所绑定。
以上的这些 跟发不发消息 没有关系
他在发消息之前 就已经设置好了:

我有队列 Q1 Q2.

我给Q1的绑定规则是 T.# ,我给Q2的绑定规则是 T.*

OK 现在服务开启

好了这时候 来一条信息发送 它是要带上routingkey的
这里的routingkey 是消息要发的时候它才带过来的

消息1 来了 routingkey T.123 符合 给Q1, Q2
消息1 来了 routingkey T.123.123 符合 只给Q2
消息1 来了 routingkey P.123 不符合所有此交换机的绑定队列 不发送


以上 几篇就是 rabbitmq的入门 和java操作。
后面我会分享记录一些 和springboot的集成 让我们能更方便的使用MQ。

很多兄弟尤其是入门的编程新手 会觉得 直接看springboot的集成就好了 这些用不到。
其实你直接用框架和集成 这样对你的学习和成长是不利的,因为你不知道框架的里面到底干了些什么,你对他的理解 也会浅很多。所以一定要把初级的都看看 多动手敲一遍。 再看框架的集成

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【夜莺(Flashcat)V6监控】2.夜莺告警相关: 多服务器多业务配置

介绍 本章侧重点是应用,根据大家不同业务、服务器部署众多等等;根据不同团队,不同业务进行划分;方便不同的团队负责自己职责内的工作; 比如我们场景如下: 三块业务:人工智能、医药、团购&…

分层强化学习 学习笔记

分层强化学习代码汇总 0.综述 《The Promise of Hierarchical Reinforcement Learning》分层强化学习的前景 强化学习 强化学习问题的设置: 有两个主角:一个代理和一个环境。环境是代理所生活和交互的地方。在每一次交互中,代理都能看到世…

深度解析:5G与未来天线技术 5G通信到底需要什么样的天线?

过去二十年,我们见证了移动通信从1G到4G LTE的转变。在这期间,通信的关键技术在发生变化,处理的信息量成倍增长。而天线,是实现这一跨越式提升不可或缺的组件。 按照业界的定义,天线是一种变换器,它把传输…

一图看懂 et_xmlfile 模块:一个用于创建大型XML文件的低内存库,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 et_xmlfile 模块:一个用于创建大型XML文件的低内存库,资料整理笔记(大全) 🧊摘要🧊解释&#x1f9ca…

网络进阶学习:子网掩码及VLAN划分

网络进阶学习:子网掩码及VLAN划分 什么是子网?什么是子网掩码?什么是VLAN子网掩码和VLAN的关系小结 什么是子网? ⭐子网是将一个大的IP地址段划分成若干个小的IP地址段的网络。子网可以帮助网络管理员更好地管理网络,…

reids学习--redis常用命令

字符串string操作命令 Redis中字符串类型常用命令: 操作描述set key value设置指定key的值get key获取指定key的值setex key seconds value设置指定key的值,并将key的过期时间设为seconds秒(可用于验证码登录)setnx key value只有在key不存在时设置key…

玩转SAM语义分割之(2)显示特定的图片

文章目录 1. 使用matplotlib显示出完整彩色的掩码,并将其保存下来 2. 使用matplotlib显示出单张掩码,只保存面积大于一个阈值的掩码图片3. 对一整个文件夹中的图片进行处理,只保存面积大于一定阈值的掩码图片4. 查看特定坐标点处是否有mask掩…

Go语言的并发:goroutine和channel

目录 【Go 的并发方案:goroutine】 goroutine 的基本用法 【通道channel】 创建channel: 发送与接收变量: 关闭channel: 【channel的类型】 无缓冲channel和带缓冲channel 无缓冲channel 带缓冲channel nil channel 单…

随便聊聊 顺便晒一下我的听歌设备

平时最大的爱好就是听歌了,我平时的听歌类型挺多元化的,硬要说的话更偏向 Jpop、ACG、女声、轻音乐、大编制、交响乐,当然好听的都听不局限于类型。 又是30天一天不落O(∩_∩)O😄 作为一个音乐爱好者,在听歌设备上面花…

Liunx压缩命令 - zip

zip命令 – 压缩文件 zip命令的功能是用于压缩文件,解压命令为unzip。通过zip命令可以将文件打包成.zip格式的压缩包,里面会包含文件的名称、路径、创建时间、上次修改时间等等信息,与tar命令相似。 语法格式:zip 参数 目标文件…

MySQL高级_第04章_逻辑架构

MySQL高级_第04章_逻辑架构 1. 逻辑架构剖析 1.1 服务器处理客户端请求 那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?这里以查询请求为例展示: 下面具体展开看一下: 1.2 Connectors 1.3 第1…

Go 本地缓存 bigcache

​本地缓存已经算是数据库的常规设计了,因为数据直接缓存在机器内存中,避免昂贵的IO开销,数据的读取和写入快到不可思议。本地缓存常驻在内存中,就好像业务逻辑中声明的全局变量一样,不会被垃圾回收。但本地内存也会导…

JavaScript:new操作符

一、new操作符的作用 用于创建一个给定构造函数的实例对象 new操作符创建一个用户定义的对象类型的实例 或 具有构造函数的内置对象的实例。二、new一个构造函数的执行过程 2.1、创建一个空对象obj 2.2、将空对象的原型与构造函数的原型连接起来 2.3、将构造函数中的this绑定…

CPU的功能和组成

CPU的功能和组成 CPU是控制计算机自动完成取指令和执行指令任务的部件,是计算机的核心部件、简称CPU 功能: 指令控制:对程序的顺序控制也是对指令执行的顺序控制(PC、JMP)操作控制:产生各种操作信号&…

2023.05.17-使用Vizzy进行音乐的可视化

文章目录 1. 简介2. 官网3. 使用3.1. 进行音乐可视化 1. 简介 Vizzy是MusicVid创作者的另一个在线音乐可视化工具。虽然这款应用还处于Alpha版本,但Vizzy相当令人印象深刻,绝对值得一试。Vizzy支持动画文本对象、频谱、图像和效果。工具集的最突出的功能…

基础篇007. 串行通信(二)--中断方式接收数据

目录 1. 实验任务 2. 硬件原理 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3.2 配置调试方式 3.3 配置时钟电路 3.4 配置GPIO 3.5 配置串口参数 3.6 配置时钟 3.7 项目配置 4. 串行通信实验 4.1 UART串口printf,scanf函数串口重定向 4.2 …

数组(C语言程序设计)

一、一维数组 数组是相同类型的有序数据的集合 1、一维数组的定义 形式:类型名 数组名[常量表达式] 2、一维数组元素的引用 形式:数组名[下标] 3、一维数组的初始化 形式:类型名 数组名[数组长度]{初值表} 4、一维数组程序设计示例 【例6.…

如何画类图

是为了写论文才回头看的,已经忘光了 在类图中,我们用一个矩形来表示一个类。这个矩形通常分为三个部分: 顶部:写类的名字。 中间:写类的特性,比如一个"狗"类可能有"颜色",“品种"…

Go语言的错误和异常处理:error、panic和recover

目录 【error类型】 error的基本用法 error.Is 用法 封装自定义错误结构体 error.As 用法 错误行为特征检视策略 【异常panic和recover】 panic recover panic 和 os.Exit 如何正确应对panic 【error类型】 error的基本用法 在Go语言中,一般使用 error …

【P1003 [NOIP2011 提高组] 铺地毯】

[NOIP2011 提高组] 铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n n n 张地毯,编号从 1 1 1 到 n n n。现在将这些地毯按照编号从小…