RabbitMQ通配符模式

RabbitMQ通配符模式

  • 简介
  • 代码演示
    • 生产者
    • 消费者

简介

RabbitMQ是一个开源的消息中间件,在分布式系统中被广泛应用于消息的传递和处理。它支持多种工作模式,其中之一是通配符(TOPIC)模式。本文将对RabbitMQ的通配符模式进行详细的讲解。

通配符模式是一种灵活的消息传递模式,可以根据消息的路由键(routing key)和绑定(binding)模式来实现精确的消息过滤和匹配。在RabbitMQ中,路由键由生产者定义,用于标识消息的目的地,而绑定则由消费者定义,用于指定消息的接收规则。

通配符模式使用符号“#”和“”来进行模式匹配。其中,“#”表示匹配零个或多个单词,“”表示匹配一个单词。例如,路由键“news.sports.#”可以匹配诸如“news.sports.football”和“news.sports.tennis”等多个消息,而路由键“news.sports.*”只能匹配到一个消息,如“news.sports.football”。

在RabbitMQ中,生产者将消息发送到交换机(exchange),而消费者则从队列(queue)中接收消息。在通配符模式中,交换机通过匹配路由键和绑定模式来将消息路由到相应的队列中。一个队列可以有多个绑定,一个绑定可以匹配多个路由键,这使得消息可以被多个消费者接收。

通配符模式的一个重要概念是通配符表达式(binding pattern),它定义了绑定的模式规则。通配符表达式可以包含多个单词和通配符符号,以及点号(.)进行分隔。通配符表达式越精确,匹配的消息越准确。

通配符模式的优势在于它可以灵活地匹配消息,使得消息可以根据不同的条件进行过滤和选择。通过合理地定义绑定和路由键,我们可以实现复杂的消息过滤和路由策略,提高系统的灵活性和性能。

当使用RabbitMQ的通配符模式时,我们可以使用Java代码来创建生产者和消费者来实现消息的发送和接收。

代码演示

首先,我们需要添加RabbitMQ Java客户端库的依赖项,例如在Maven项目中,我们可以添加以下依赖项:

<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.9.0</version>
</dependency>

接下来,我们可以编写生产者的代码来发送消息。首先,我们需要创建一个连接到RabbitMQ服务器的连接工厂,并设置服务器的地址、端口、用户名和密码。然后,我们可以使用连接工厂创建一个连接,并创建一个通道。

生产者

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class Producer {private static final String EXCHANGE_NAME = "topic_exchange";public static void main(String[] args) {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setPort(5672);factory.setUsername("guest");factory.setPassword("guest");try {Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.exchangeDeclare(EXCHANGE_NAME, "topic");String routingKey = "topic.key1";String message = "Hello RabbitMQ!";channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes());System.out.println("Message sent: " + message);channel.close();connection.close();} catch (Exception e) {e.printStackTrace();}}
}

在上面的代码中,我们首先声明一个主题交换机,然后使用basicPublish方法将消息发送到指定的交换机及路由键。

接下来,我们可以编写消费者的代码来接收消息。同样,我们需要创建一个连接工厂,并设置服务器的地址、端口、用户名和密码。然后,我们可以使用连接工厂创建一个连接,并创建一个通道。接着,我们可以声明一个主题交换机,并创建一个自动生成的队列。最后,我们可以使用basicConsume方法来接收消息。

消费者

import com.rabbitmq.client.*;public class Consumer {private static final String EXCHANGE_NAME = "topic_exchange";public static void main(String[] args) {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setPort(5672);factory.setUsername("guest");factory.setPassword("guest");try {Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.exchangeDeclare(EXCHANGE_NAME, "topic");String queueName = channel.queueDeclare().getQueue();channel.queueBind(queueName, EXCHANGE_NAME, "topic.*");System.out.println("Waiting for messages...");Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {String message = new String(body, "UTF-8");System.out.println("Received message: " + message);}};channel.basicConsume(queueName, true, consumer);} catch (Exception e) {e.printStackTrace();}}
}

在上面的代码中,我们首先声明一个主题交换机,然后创建一个自动生成的队列,并使用queueBind方法将队列绑定到交换机上,指定需要接收的消息路由键的模式。

最后,我们创建一个消费者对象,重写handleDelivery方法来处理接收到的消息。然后,使用basicConsume方法来注册消费者。

通过以上的代码,我们就可以在通配符模式下进行消息的发送和接收了。

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

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

相关文章

Python_AI库 matplotlib扩展知识

Python_AI库 matplotlib扩展知识 在数据分析和处理的领域里&#xff0c;可视化是一种不可或缺的手段。通过图形化的展示&#xff0c;我们可以更直观地理解数据的分布、趋势和关系。而matplotlib&#xff0c;作为Python中最为流行的数据可视化库之一&#xff0c;以其强大的功能…

【C++】简易二叉搜索树

目录 一、概念&#xff1a; 二、代码实现&#xff1a; 大致结构&#xff1a; 1、遍历&#xff1a; 2、insert 3、find 4、erase 三、总结&#xff1a; 一、概念&#xff1a; 二叉搜索树又称为二叉排序树&#xff0c;是一种具有特殊性质的二叉树&#xff0c;对于每一个节…

在虚拟环境中找到Qt Designer

Pyqt5中找到Qt Designer 安装Pyqt5和Qt Designer: pip install pyqt5-tools 假设Python的虚拟环境名为:d2l &#xff0c;虚拟环境在d2l文件夹中 D:\Software\d2l\Lib\site-packages\qt5_applications\Qt\bin 双击Qt designer启动 Pyside2中找到Qt Designer d2l是虚拟环境…

上位机图像处理和嵌入式模块部署(树莓派4b下使用sqlite3)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 嵌入式设备下面&#xff0c;有的时候也要对数据进行处理和保存。如果处理的数据不是很多&#xff0c;一般用json就可以。但是数据如果量比较大&…

rust前端web开发框架yew使用

构建完整基于 rust 的 web 应用,使用yew框架 trunk 构建、打包、发布 wasm web 应用 安装后会作为一个系统命令&#xff0c;默认有两个特性开启 rustls - 客户端与服务端通信的 tls 库update_check - 用于应用启动时启动更新检查&#xff0c;应用有更新时提示用户更新。nati…

Linux——终端

一、终端 1、终端是什么 终端最初是指终端设备&#xff08;Terminal&#xff09;&#xff0c;它是一种用户与计算机系统进行交互的硬件设备。在早期的计算机系统中&#xff0c;终端通常是一台带有键盘和显示器的电脑&#xff0c;用户通过它输入命令&#xff0c;计算机在执行命…

Swift中的单例

在Swift中实现单例模式可以通过使用静态常量或静态变量来实现。下面是一个示例&#xff1a; class Singleton {static let sharedInstance Singleton()private init() {// 这里是初始化代码}// 这里是其他实例方法和属性 }在上面的示例中&#xff0c;通过使用static let来创建…

SpringBoot引入Layui样式总是出现404

一般出现Layui样式文件如css&#xff0c;js404的错误 解决方案 &#xff08;1&#xff09;首先将其中的静态资源下载resources/static中 &#xff08;2&#xff09;在启动类中重写方法 package com.gq.booksystem;import org.mybatis.spring.annotation.MapperScan; import …

商城数据库(1-4)

1——商家认证项目表&#xff08;wang_accreds&#xff09; CREATE TABLE wang_accreds (accredId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,accredName varchar(50) NOT NULL COMMENT 名称,accredImg varchar(150) NOT NULL DEFAULT 0 COMMENT 图标,dataFlag tinyint…

centOS 7.9操作

名称日期版本作者centOS7.9操作2024.4.271.0lll 实验题目&#xff1a; 创建一个用户。 在创建的用户中再创建一个2024的目录。 在2024的下在创建一个 1---10的目录&#xff0c;再创建一个a--z.txt的文件。 在创建一个2024bak的目录。 再将当前用户的所有文件备份到2024ba…

【算法学习】线段树基础版

一 线段树 1.概念 线段树可以理解为一个二叉树&#xff0c;如果是利用线段树求区间的和&#xff0c;那么每个结点的权值维护的是结点所维护区间的和&#xff0c;再将该区间一分为二&#xff0c;分别交由左右儿子维护。 拿区间1 - 4的和来举例子&#xff0c; 根结点维护的是区…

开发管理导读

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言一、代码版本管理1、github代码版本管理2、gitlab代码版本管理3、SVN&#xff08;Subversion&#xff09;代码版本管理 二、代…

JavaEE——Spring Boot入门

目录 &#x1f4da; JavaEE——Spring Boot入门 &#x1f527; 1. 新建Spring Boot项目 &#x1f6e0; 2. 添加pom依赖 &#x1f4dd; 3. 添加application.yml文件 &#x1f4c2; 4. 创建Dao层 &#x1f527; 5. 创建Service层 &#x1f5a5;️ 6. 创建Controller层及HT…

【小浩算法cpp题解】合并两个有序链表(21)

目录 前言我的思路我的代码 前言 今天继续做链表相关的题目&#xff0c;考研期间练多了现在觉得这种题目真是简单。晚上如果有机会可以再做一个树的深度优先搜索。 我的思路 其实这道题的思路比较像排序中的二路归并&#xff0c;最核心的点是在归并的时候要防止断链,我的解决…

librosa 语音识别 学习笔记

目录 不错的功能介绍 librosa安装 语音识别 不错的功能介绍 librosa&#xff0c;一个很有趣的 Python 库&#xff01; - 简书 音频转特征向量 GitHub - librosa/librosa: Python library for audio and music analysis librosa安装 2024.04.27 测试ok Win11系统 pip in…

使用ClassFinal实现springboot项目jar包加密

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

docker容器技术篇:集群管理实战mesos+zookeeper+marathon(二)

docker集群管理实战mesoszookeepermarathon&#xff08;二&#xff09; 一 实验环境 操作系统&#xff1a;centos7.9 二 基础环境配置以及安装mesos 安装过程请点击下面的链接查看&#xff1a; 容器集群管理实战mesoszookeepermarathon&#xff08;一&#xff09; 三 安装…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月27日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年4月27日 星期六 农历三月十九 1、 教育部&#xff1a;深入实施学生欺凌防治专项行动&#xff0c;对所有中小学校开展起底式大排查。 2、 商务部等七部门联合印发《汽车以旧换新补贴实施细则》&#xff0c;购车最高补贴1万…

【VBA】获取指定目录下的Excel文件,并合并所有excel中的内容。

1.新建一个excel表格。并创建两个Sheet&#xff0c;名字分别命名为FileList 和 All information。 2.按ALTF11进入 VBA编程模块&#xff0c;插入模块。 3.将如下 第五部分代码复制到模块中。 点击运行即可&#xff0c;然后就能提取指定目录下的所有excel文件信息并合并到一起…

连接oracle时出现ORA-12541:TNS:无监听程序的错误

遇到个问题&#xff0c;有一台windows serve 的服务器&#xff0c;这台服务器&#xff08;只部署了oracle&#xff09;忽然监听出问题了&#xff0c;提示 一、问题检查步骤&#xff1a; 1.winR--->cmd--->输入 lsnrctl status 查看监听的状态 如果监听器未运行&#…