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

【RabbitMQ笔记06】消息队列RabbitMQ七种模式之Topics主题模式

这篇文章,主要介绍消息队列RabbitMQ七种模式之Topics主题模式。

目录

一、消息队列

1.1、主题模式(Topics)

1.2、案例代码

(1)引入依赖

(2)编写生产者

(3)编写消费者


一、消息队列

1.1、主题模式(Topics)

前一篇文章介绍了Routing路由模式,它是根据消息的唯一标识routing key路由键,将其分发到不同的Queue队列里面,这篇文章介绍的Topics主题模式,也是需要依赖与routing key路由键来进行分发消息,但是不同的是,Topics主题可以采用通配符的方式来指定routing key。

Topics主题模式下,它要求【routing key路由键】必须采用【多个单词】来表示,每一个单词采用点好【.】分割,例如:【xxx.yyy.zzz】,这就是三个单词,分别是:xxx、yyy、zzz,路由键的最长长度是255bytes。

Topics主题模式支持两种通配符:

  • 星号【*】通配符:只能够匹配1个单词(Topics主题模式下,按照点好【.】号来判断单词)。
  • 井号【#】通配符:匹配0个或者多个单词。

Topics主题模式大致如下所示:

主题模式下,每一个Queue队列能够接收到的消息类型就非常多了,只要消息满足routing key的格式,就会被分发到这个Queue队列里面。Topics主题模式和Routing路由模式有什么区别呢???

  • Routing路由模式:需要指定具体的routing key。
  • Topics主题模式:可以采用通配符来指定routing key,如果Topics主题模式中没有使用通配符,那么这个时候就相当于Routing路由模式,所以Topics主题模式比Routing路由模式更加的灵活。

1.2、案例代码

(1)引入依赖

<!-- 引入 RabbitMQ 依赖 -->
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.16.0</version>
</dependency>

(2)编写生产者

  • 生产者发送消息时候,设置routing key是采用【spring.xxx】格式的。
package com.rabbitmq.demo.topics;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;/*** @version 1.0.0* @Date: 2023/2/25 16:23* @Copyright (C) ZhuYouBin* @Description: 消息生产者*/
public class Producer {public static void main(String[] args) {// 1、创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2、设置连接的 RabbitMQ 服务地址factory.setHost("127.0.0.1"); // 默认就是本机factory.setPort(5672); // 默认就是 5672 端口// 3、获取连接Connection connection = null; // 连接Channel channel = null; // 通道try {connection = factory.newConnection();// 4、获取通道channel = connection.createChannel();// 5、声明 Exchange,如果不存在,则会创建String exchangeName = "exchange_topics_2023";channel.exchangeDeclare(exchangeName, "topic");// 6、发送消息for (int i = 0; i < 10; i++) {// 路由键唯一标识String routingKey = "spring.error";if (i % 3 == 0) {routingKey = "spring.info";} else if (i % 3 == 1) {routingKey = "java.warn";}String message = "这是Topics模式,发送的第【" + (i+1) + "】条【" + routingKey + "】消息数据";channel.basicPublish(exchangeName, routingKey, null, message.getBytes());}} catch (Exception e) {e.printStackTrace();} finally {if (null != channel) {try {channel.close();} catch (Exception e) {}}if (null != connection) {try {connection.close();} catch (Exception e) {}}}}
}

(3)编写消费者

  • 消费者消费消息的时候,采用Topic主题模式,并且只消费routing key满足【spring.*】的消息。
package com.rabbitmq.demo.topics;import com.rabbitmq.client.*;import java.io.IOException;/*** @version 1.0.0* @Date: 2023/2/25 16:30* @Copyright (C) ZhuYouBin* @Description: 消息消费者*/
public class Consumer {public static void main(String[] args) {// 1、创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2、设置连接的 RabbitMQ 服务地址factory.setHost("127.0.0.1"); // 默认就是本机factory.setPort(5672); // 默认就是 5672 端口// 3、获取连接Connection connection = null; // 连接Channel channel = null; // 通道try {connection = factory.newConnection();// 4、获取通道channel = connection.createChannel();// 5、声明 Exchange,如果不存在,则会创建String exchangeName = "exchange_topics_2023";channel.exchangeDeclare(exchangeName, "topic");// 6、指定需要操作的消息队列,如果队列不存在,则会创建String queueName = "queue_topics_2023";channel.queueDeclare(queueName, false, false, false, null);// 7、绑定 Exchange 和 Queue, 接收 routingKey = "spring.*" 的消息channel.queueBind(queueName, exchangeName, "spring.*");// 8、消费消息DeliverCallback callback = new DeliverCallback() {public void handle(String s, Delivery delivery) throws IOException {// 接收消息System.out.println("这是接收的消息:" + new String(delivery.getBody()));}};channel.basicConsume(queueName, true, callback, i->{});} catch (Exception e) {e.printStackTrace();}}
}

运行结果如下所示:

到此,RabbitMQ消息队列中的Topic主题模式就介绍完啦。

综上,这篇文章结束了,主要介绍消息队列RabbitMQ七种模式之Topics主题模式。

相关文章:

【RabbitMQ笔记06】消息队列RabbitMQ七种模式之Topics主题模式

这篇文章&#xff0c;主要介绍消息队列RabbitMQ七种模式之Topics主题模式。 目录 一、消息队列 1.1、主题模式&#xff08;Topics&#xff09; 1.2、案例代码 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;编写生产者 &#xff08;3&#xff09;编写消费…...

ChatGPT似乎有的时候并不能搞懂Java的动态分派,你懂了吗?

目录 碎碎念 ChatGPT 中出现的问题 那么正确答案应该是什么呢&#xff1f; 分派的相关知识点总结&#xff1a; 分派是什么&#xff1f; 静态分派与动态分派&#xff1a; Java语言是静态多分派&#xff0c;动态单分派的&#xff1b; 静态分派&#xff1a;静态重载多分派…...

【C++初阶】vector的模拟实现

大家好我是沐曦希&#x1f495; 文章目录一、前言二、无参构造&析构三、基础接口1.empty和clear2.size和capacity3.[]和iterator四、reserve和resize五、尾插尾删六、其他构造1.迭代器区间构造2.拷贝构造七、memcpy问题八、完整代码一、前言 在模拟实现容器时候&#xff0…...

微信小程序、小游戏的流量主一般可以赚多少钱?

本篇文章主要科普小程序、小游戏流量主一般赚钱的实际情况&#xff0c;通过在下长期运营的经验汇总而成。 日期&#xff1a;2023年2月26日 作者&#xff1a;任聪聪 小程序、小程序满1000用户后即可开通流量主&#xff0c;但实际上很多人并没有传说中的那种日赚几千的流量收入的…...

jni-Demo-基于linux(c++ java)

跑一个jni 的最简单的Demo需要提前准备 VsCode 编译器、win10下&#xff0c;vscode中集成linux操作系统、c编译器&#xff08;gcc、g&#xff09;&#xff0c;java编译器&#xff08;jdk1.8&#xff09;参考&#xff1a;https://mangocool.com/1653030123842.htmlJniDemo类&…...

指针的进阶——(1)

本次讲解重点&#xff1a; 1、字符指针 2、数组指针 3、指针数组 4、数组传参和指针传参 5、函数指针 关于指针这个知识点的主题&#xff0c;我们在前面已经初级阶段已经对指针有了大致的理解和应用了。我们知道了指针的概念&#xff1a; 1、指针就是地址&#xff0c;但口…...

电商平台的促销活动如何抵御大流量的ddos攻击

每一次活动大促带来的迅猛流量&#xff0c;对技术人而言都是一次严峻考验。如果在活动期间遭受黑产恶意 DDoS 攻击&#xff0c;无疑是雪上加霜。电商的特性是业务常态下通常不会遭受大流量 DDoS 攻击&#xff0c;且对延迟敏感&#xff0c;因此只需要在活动期间按需使用 DDoS 防…...

代码随想录-48-104. 二叉树的最大深度

目录前言题目1.层序迭代思路2. 本题思路分析&#xff1a;3. 算法实现4. pop函数的算法复杂度5. 算法坑点前言 在本科毕设结束后&#xff0c;我开始刷卡哥的“代码随想录”&#xff0c;每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。 代码随想录此题链接 …...

【Vue3源码】第六章 computed的实现

【Vue3源码】第六章 computed的实现 上一章节我们实现了 ref 及其它配套的isRef、unRef 和 proxyRefs API。这一章开始实现computed计算属性。 认识computed 接受一个 getter 函数&#xff0c;返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。…...

Java基础之注解

3.注解 3.1概述【理解】 概述 对我们的程序进行标注和解释 注解和注释的区别 注释: 给程序员看的注解: 给编译器看的 使用注解进行配置配置的优势 代码更加简洁,方便 3.2自定义注解【理解】 格式 public interface 注解名称 { ​ public 属性类型 属性名() default 默认值…...

三、线性表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 自学JAVA数据结构笔记&#xff0c;跟学视频为&#xff1a;黑马程序员Java数据结构与java算法全套教程…...

C++统计方形

统计方形 内存限制&#xff1a;256 MB 时间限制&#xff1a;1 S 题目描述 有一个n*m方格的棋盘&#xff0c;求其方格包含多少正方形、长方形&#xff08;此处长方形不包含正方形&#xff09; 输入格式 输入存在多组测试数据。每组测试数据输入两个整数n,m&#xff0c;数字不超…...

Tina_Linux配网开发指南

OpenRemoved_Tina_Linux_配网_开发指南 1 概述 1.1 编写目的 介绍Allwinner 平台上基于wifimanager-v2.0 的WiFi 配网方式&#xff0c;包括softap(WiFi ap 模式热点配网),soundwave(声波配网),BLE(蓝牙低功耗配网)。 1.2 适用范围 • allwinner 软件平台tina v5.0 版本及以…...

高频面试题|RabbitMQ如何防止消息的重复消费?

一. 前言最近有很多小伙伴开始找工作&#xff0c;在面试时&#xff0c;面试官经常会问我们这样一个题目&#xff1a;RabbitMQ如何防止重复消费?有很多小伙伴这个时候都在想&#xff0c;消息怎么还会重复消费呢???.......所以他们在面试后就跑来问壹哥&#xff0c;针对这个比…...

黑盒测试用例设计方法-边界值分析法

目录 一、边界值定义 二、边界值的考虑 三、边界值的优化 四、边界值的设计用例的步骤 五、案例 六、边界值的类型 一、边界值定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下…...

项目风险管理中不可忽视的5个关键点

1、风险意识非常重要 项目经理必须要有风险意识&#xff0c;并不是项目计划做好就万事大吉&#xff0c;而是需要对项目风险进行预判&#xff0c;时刻保持风险意识&#xff0c;及时发现和处理项目风险。 项目风险管理关键&#xff1a;风险意识​ 2、建立组织风险资产库 寻…...

Linux->进程地址空间

目录 前言&#xff1a; 1. 程序地址空间回顾 2. 进程空间是什么 3. 进程地址空间与内存 4. 进程地址空间和内存的关联 5. 为什么要有进程地址空间 前言&#xff1a; 我们在平时学习的过程当中总是听到栈、堆、代码段等等储存空间&#xff0c;但是这些东西到底是什么&…...

【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程

1.作品图 2.准备工作 目前网上能搜到的stable-diffusion-webui的安装教程都是Window和Mac M1芯片的&#xff0c;而对于因特尔芯片的文章少之又少&#xff0c;这就导致我们还在用老Intel 芯片的Mac本&#xff0c;看着别人生成美女图片只能眼馋。所以小卷这周末折腾了一天&#…...

基于stm32电梯管理系统设计

基于stm32电梯管理系统设计这里记录一下以前自己做的嵌入式课程设计&#xff0c;报告中的图片和文字太多了&#xff0c;全部一个一个把搬过来太麻烦了,需要完整文本和代码自行q我963160156&#xff0c;也可在微信公众号 *高级嵌入式软件* 里回复 *电梯* 查看完整版文章摘要关键…...

Spring中的FactoryBean 和 BeanFactory、BeanPostProcessor 和BeanFactoryPostProcessor解析

文章目录FactoryBean 和 BeanFactory后置处理器BeanPostProcessor 和 BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessorFactoryBean 和 BeanFactory BeanFactory接⼝是容器的顶级接⼝&#xff0c;定义了容器的⼀些基础⾏为&#xff0c;负责⽣产和管理Bean的…...

Azure OpenAI代理层:无缝兼容官方API,平滑迁移与统一管理

1. 项目概述&#xff1a;一个为Azure OpenAI服务量身打造的代理层如果你正在使用微软Azure平台上的OpenAI服务&#xff0c;比如GPT-4、GPT-3.5-Turbo或者Embeddings模型&#xff0c;并且遇到了API格式不兼容、部署环境限制或者想统一管理多个终端的麻烦&#xff0c;那么diemus/…...

如何将Figma设计文件转换为结构化JSON数据:设计开发一体化的终极指南

如何将Figma设计文件转换为结构化JSON数据&#xff1a;设计开发一体化的终极指南 【免费下载链接】figma-to-json &#x1f4be; Read/Write Figma Files as JSON 项目地址: https://gitcode.com/gh_mirrors/fi/figma-to-json 想象一下这个场景&#xff1a;设计师刚刚完…...

Naftis社区贡献指南:如何参与这个开源Istio项目

Naftis社区贡献指南&#xff1a;如何参与这个开源Istio项目 【免费下载链接】naftis An awesome dashboard for Istio built with love. 项目地址: https://gitcode.com/gh_mirrors/na/naftis Naftis是一个基于Apache 2.0协议开源的Istio仪表板项目&#xff0c;专为简化…...

基于Anylogic仿真的地铁换乘站客流瓶颈识别与疏导策略——以成都春熙路站为例

1. 为什么需要仿真技术解决地铁换乘站拥堵问题 每天早高峰挤地铁的朋友们一定深有体会&#xff0c;特别是像成都春熙路这样的换乘大站&#xff0c;站台上人挤人、通道里水泄不通的场景简直让人崩溃。作为成都地铁2号线和3号线的换乘枢纽&#xff0c;春熙路站日均客流量超过30万…...

如何利用libui-node生态构建跨平台桌面应用:Proton-Native和Vuido深度解析

如何利用libui-node生态构建跨平台桌面应用&#xff1a;Proton-Native和Vuido深度解析 【免费下载链接】libui-node Node bindings for libui, an awesome native UI library for Unix, OSX and Windows 项目地址: https://gitcode.com/gh_mirrors/li/libui-node libui-…...

消息队列选型对比

目录消息队列选型对比&#xff1a;从核心原理到场景化决策一、快速选型&#xff1a;一张表看懂核心差异二、深入解读&#xff1a;每款 MQ 的设计哲学与适用边界2.1 RabbitMQ&#xff1a;灵活路由的企业级消息代理2.2 Apache Kafka&#xff1a;吞吐为王的日志流平台2.3 Apache R…...

Python调用MATLAB引擎避坑指南:从安装路径选择到`setup.py` install命令的完整实战

Python调用MATLAB引擎避坑指南&#xff1a;从安装路径选择到setup.py install命令的完整实战 在科学计算和工程仿真领域&#xff0c;MATLAB和Python各有优势。许多开发者希望将两者结合使用&#xff0c;但安装MATLAB引擎到Python环境时常常遇到各种"玄学"问题。本文将…...

如何快速掌握AMD锐龙隐藏性能:Ryzen SDT调试工具终极指南

如何快速掌握AMD锐龙隐藏性能&#xff1a;Ryzen SDT调试工具终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...

毫米波雷达选型指南:HLK-LD1125H-24G vs 传统红外/超声波,在智能办公场景下怎么选?

毫米波雷达选型指南&#xff1a;HLK-LD1125H-24G vs 传统红外/超声波&#xff0c;在智能办公场景下怎么选&#xff1f; 在智能办公场景中&#xff0c;人员检测技术的选择直接影响着空间管理效率与用户体验。传统红外&#xff08;PIR&#xff09;和超声波传感器曾长期主导市场&…...

VSCode安装clang-format插件及使用

VSCode安装clang-format插件及使用1.clang-format插件安装2.安装真正的格式化工具clang-format3.生成.clang-format配置文件并修改4.修改配置文件4.1全局配置文件修改4.2工作空间配置文件修改5.格式化代码1.clang-format插件安装 插件安装方式分为直接安装和离线安装两种。 直…...