RabbitMQ消息模型之Topic消息模型

Topic消费模型

*  通配符模型
*      生产者必须指定完整且准确的路由key
*      消费者可以使用通配符
*          *:可以替代一级的任意字符 add.*     ==>     add.user                add.goods
*          #:可以替代多级的任意字符 add.#     ==>     add.user.name           add.user.name.firstName
生产者
package com.example.demo02.mq.topic;import com.example.demo02.mq.util.ConnectionUtils;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;import java.io.IOException;/*** @author Allen* 4/11/2024 10:15 AM* @version 1.0* @description: 通配符模型发送者*  通配符模型*      生产者必须指定完整且准确的路由key*      消费者可以使用通配符*          *:可以替代一级的任意字符 add.*     ==>     add.user                add.goods*          #:可以替代多级的任意字符 add.#     ==>     add.user.name           add.user.name.firstName*/
public class TopicSender {public static void main(String[] args) throws Exception {// 1:获取连接Connection connection = ConnectionUtils.getConnection();// 2:创建通道Channel channel = connection.createChannel();// 3:声明交换机channel.exchangeDeclare("topic.exchange", BuiltinExchangeType.TOPIC,false);// 4:发送消息 路由Key写法 goods.add 不要使用通配符String msg1 = "商品新增了,Topic模型,routing key 为 goods.add";String msg2 = "商品修改了,Topic模型,routing key 为 goods.update";String msg3 = "商品删除了,Topic模型,routing key 为 goods.delete";String msg4 = "用户新增了,Topic模型,routing key 为 user.add";String msg5 = "用户修改了,Topic模型,routing key 为 user.update";String msg6 = "用户删除了,Topic模型,routing key 为 user.delete";String msg7 = "添加了用户名字,Topic模型,routing key 为 user.add.name";String msg8 = "添加了用户年龄,Topic模型,routing key 为 user.add.age";String msg9 = "修改了用户名字,Topic模型,routing key 为 user.update.name";String msg10 = "修改了用户年龄,Topic模型,routing key 为 user.update.age";channel.basicPublish("topic.exchange","goods.add",null,msg1.getBytes());channel.basicPublish("topic.exchange","goods.update",null,msg2.getBytes());channel.basicPublish("topic.exchange","goods.delete",null,msg3.getBytes());channel.basicPublish("topic.exchange","user.add",null,msg4.getBytes());channel.basicPublish("topic.exchange","user.update",null,msg5.getBytes());channel.basicPublish("topic.exchange","user.delete",null,msg6.getBytes());channel.basicPublish("topic.exchange","user.add.name",null,msg7.getBytes());channel.basicPublish("topic.exchange","user.add.age",null,msg8.getBytes());channel.basicPublish("topic.exchange","user.update.name",null,msg9.getBytes());channel.basicPublish("topic.exchange","user.update.age",null,msg10.getBytes());// 5:关闭连接channel.close();connection.close();}
}
消费者1
package com.example.demo02.mq.topic;import com.example.demo02.mq.util.ConnectionUtils;
import com.rabbitmq.client.*;import java.io.IOException;/*** @author Allen* 4/11/2024 10:22 AM* @version 1.0** @description: 通配符模型接收者1*/
public class TopicReceiver1 {public static void main(String[] args) throws Exception {// 1:获取连接Connection connection = ConnectionUtils.getConnection();// 2:创建通道Channel channel = connection.createChannel();// 3:声明交换机channel.exchangeDeclare("topic.exchange", BuiltinExchangeType.TOPIC,false);// 4:声明队列channel.queueDeclare("topic.queue1", false, false, false, null);// 5:绑定队列到交换机   使用通配符* 一级任意字符  # 多级任意字符channel.queueBind("topic.queue1", "topic.exchange", "goods.*");// 6:消费消息Consumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("商品模块接收到的消息是:" + new String(body));channel.basicAck(envelope.getDeliveryTag(),false);}};channel.basicConsume("topic.queue1",false,consumer);}
}
消费者2
package com.example.demo02.mq.topic;import com.example.demo02.mq.util.ConnectionUtils;
import com.rabbitmq.client.*;import java.io.IOException;/*** @author Allen* 4/11/2024 10:22 AM* @version 1.0** @description: 通配符模型接收者2*/
public class TopicReceiver2 {public static void main(String[] args) throws Exception {// 1:获取连接Connection connection = ConnectionUtils.getConnection();// 2:创建通道Channel channel = connection.createChannel();// 3:声明交换机channel.exchangeDeclare("topic.exchange", BuiltinExchangeType.TOPIC,false);// 4:声明队列channel.queueDeclare("topic.queue2", false, false, false, null);// 5:绑定队列到交换机  使用通配符 user.*  user.#channel.queueBind("topic.queue2", "topic.exchange", "user.#");// 6:消费消息Consumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("用户模块接收到的消息是:" + new String(body));channel.basicAck(envelope.getDeliveryTag(),false);}};channel.basicConsume("topic.queue2",false,consumer);}
}
结果

在这里插入图片描述

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

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

相关文章

lua基本语法

Lua语法入门 初识lua vi hello.lua print("hello,lua") lua hello.lua 变量和循环 变量 循环 条件控制、函数 条件控制

USB端口

winx,打开设备管理器 名称解释 HS-USB 分类全称传输速率版本超速SSsuper-speed最大速率5Gbps、10Gbps、20GbpsUSB3.0~USB3.2高速HShigh-speed25Mbps-400 Mbps (最大480 Mbps)USB2.0全速FSfull-speed500Kbps-10Mbps(最大12Mbps&…

软考 — 系统架构设计师 - 嵌入式真题

问题1: 可靠度表示系统在规定条件下,规定的时间内不发生失效的概率。 失效率表示系统运行到此时从未出现失效的情况下,单位时间内系统出现失效的概率 问题 2: 动态冗余又称为主动冗余,通过故障检测,故障定…

SAP 计划策略82简介

前面的文章中我们已经测试了很多才策略,10、11、40、50、70、60、63 80策略。 本文将重点说明ATO模式下82策略的使用场景,计划策略82是SAP提供的另一种基于按单生产思想的计划策略,由客户的需求来直接驱动直接生产,是一个按单生产的场景。 1、首先我们先看下系统后台82策略…

回溯算法2s总结

8.回溯算法 回溯算法理论基础 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案 回溯法解决的问题 回溯法,一…

MySQL数据导出导出的三种办法(13/16)

数据导入导出 基本概述 目前常用的有3中数据导入与导出方法: 使用mysqldump工具: 优点: 简单易用,只需一条命令即可完成数据导出。可以导出表结构和数据,方便完整备份。支持过滤条件,可以选择导出部分数据…

VsCode 安装Jupyter Notebook

VsCode 安装Jupyter Notebook 安装 1、打开 VSCode 编辑器,点击界面左端的【扩展】栏; 2、在【搜索框】中输入python,点击第一个Python,检查是否已经安装 python 插件,没安装的点击安装;已安装的继续第3步…

ASUS华硕灵耀Pro14笔记本AMD锐龙版M7400QC,M7600QA原厂Win11系统工厂包下载

恢复华硕灵耀14PRO出厂开箱状态预装OEM系统Windows11工厂模式安装包,带Recovery恢复还原功能 适用型号: M7400QC、M7400QE、M7400QEB M7600QC、M7600QE、M7600QA、M7600QCB 链接:https://pan.baidu.com/s/1dIGRAKJQLQt_JcKbQWFxJg?pwdbn…

GD32 HID键盘矩阵键盘发送数据时,一直发送数据问题处理

这个问题找了两三天,开始并不认为是示例程序的问题,只是感觉是自己代码问题。 这个解决流程大概是: 先调好矩阵键盘=> 调用发送函数。 就是因为调用时,一直发送数据,我也在按键抬起做了操作,始终不行。 最后,发现时示例代码中有个 空闲中断 引起的。 udev->reg…

英伟达高性能芯片供货周期缩短到2-3个月,今年GPU不再紧缺?

戴尔台湾地区总经理Terence Liao近日称,英伟达高性能 AI GPU的交付周期在过去几个月中已从3-4个月缩短到仅2-3个月,进入2024年以来交货等待时间一直在不短缩短,目前的2-3个月已经是英伟达高性能GPU最短的交货期。 英伟达公司正在不断努力提高…

使用easyexcel读取excel并生成sql语句

1、引入pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM…

【IR-SDE】Image Restoration SDE项目演示运行app.py

背景&#xff1a; code:GitHub - Algolzw/image-restoration-sde: Image Restoration with Mean-Reverting Stochastic Differential Equations, ICML 2023. Winning solution of the NTIRE 2023 Image Shadow Removal Challenge. paper: Official PyTorch Implementations o…

LabVIEW闭环步进电机运动系统设计及精度分析

LabVIEW闭环步进电机运动系统设计及精度分析 在自动化设备不断发展的当代&#xff0c;闭环步进电机以其高精度和可靠性成为了自动化设备的重要组成部分。以LabVIEW软件为核心&#xff0c;结合运动控制卡及驱动器模块&#xff0c;设计并实现了一个闭环步进电机的多轴运动控制系…

Rancher1.0版本安装使用

Rancher1.0版本安装使用 准备环境 rancher是一个容器管理和服务编排工具。 如下链接&#xff0c;讲的可以&#xff0c;大家参考下&#xff0c;我已经测试过了。 http://tonybai.com/2016/04/14/an-introduction-about-rancher/ 操作系统Centos7.2 用户为root。最好使用Cent…

Mapbox 教程: 改变地图样式

注&#xff1a;相关功能在Mapbox GL JS v3中可用。在新版本中&#xff0c;默认使用标准样式&#xff0c;在创建地图时&#xff0c;可以在构造函数中明确指定style option 设置指定样式&#xff0c;也可以不设置style option 从而使用默认样式。 本示例通过Mapbox加载了一份带三…

esxi配置使用以及虚拟机管理

vSphere Client安装和esxi主机 esxi配置 许可证 虚拟机管理 vSphere Client中创建、删除等虚拟机的管理。 vSphere Client中创建虚拟机并安装操作系统&#xff1b; 步骤1 创建虚拟机 密码&#xff1a;Tongxin2023 (1) 厚置备延迟置零 以默认的厚格式创建虚拟磁盘。创建过…

佛山市人工智能产业生态交流会:实在智能Agent引领“智造浪潮”

制造业&#xff0c;实体经济的核心&#xff0c;技术创新的先锋&#xff0c;供给侧结构性改革的关键。在新一轮产业竞争中&#xff0c;数字化转型成为制造业升级的必由之路&#xff0c;是引领未来的重要抓手。 为促进数字经济赋能实体经济&#xff0c;加快人工智能技术的推广应用…

ubuntu 20.04 设置国内镜像源(阿里源、清华源)

在网上搜了好多设置国内镜像源&#xff0c;都写的乱七八糟的&#xff0c;都是随便换&#xff0c;最后还是换得一堆问题。 镜像源也是跟版本一一对应的&#xff0c;不能随便一个国内源就还过去用&#xff0c;否则会出现各种各样的问题&#xff0c;我也是吃过亏之后才发现的。 国…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿&#xff0c;用于记录和管理个人、机构或组织的联系方式&#xff0c;如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

手眼标定问题排查_2_圆网格数据排查

经过昨天晚上的调试&#xff0c;发现了一个主要问题&#xff1a;使用圆网格标定板标定时&#xff0c;不能使用cornerSubPix()函数&#xff0c;否则寻找角点时&#xff0c;会导致图一的情况(裁剪为30万像素)。就找到能参考的程序&#xff0c;推进还是很快的。 图一 一些数据对比…