RabbitMQ 入门(七)SpringAMQP五种消息类型

news2024/11/20 15:28:38

一、Topic  Exchange(消息模式)

       TopicExchange 与DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以.分割。

 

         Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让Queue和Exchange指定BingdingKey时可以使用通配符:   
        `#`:匹配一个或多个词

        `*`:匹配1个单词


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

 
举例:

`item.#`:能够匹配`item.spu.insert` 或者 `item.spu`

`item.*`:只能匹配`item.spu`

解释:

- Queue1:绑定的是`china.#` ,因此凡是以 `china.`开头的`routing key` 都会被匹配到。包括china.news和china.weather
- Queue2:绑定的是`#.news` ,因此凡是以 `.news`结尾的 `routing key` 都会被匹配。包括china.news和japan.news

二、TopicExchange 示例

实现思路如下:

1. 并利用@RabbitListener声明Exchange、Queue、RoutingKey

2. 在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2

3. 在publisher中编写测试方法,向it. topic发送消息

具体步骤:

步骤一:

1.在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2

2.并利用@RabbitListener声明Exchange、Queue、RoutingKey

@RabbitListener(bindings = @QueueBinding(
    value = @Queue(name = "topic.queue1"),
    exchange = @Exchange(name = "it.topic", type = ExchangeTypes.TOPIC),
    key = "china.#"
))
public void listenTopicQueue1(String msg){
    System.out.println("消费者接收到topic.queue1的消息:【" + msg + "】");
}

@RabbitListener(bindings = @QueueBinding(
    value = @Queue(name = "topic.queue2"),
    exchange = @Exchange(name = "it.topic", type = ExchangeTypes.TOPIC),
    key = "#.news"
))
public void listenTopicQueue2(String msg){
    System.out.println("消费者接收到topic.queue2的消息:【" + msg + "】");
}

步骤二:在publisher服务发送消息到TopicExchange

1.在publisher服务中添加测试方法

/**
     * topicExchange
     */
@Test
public void testSendTopicExchange() {
    // 交换机名称
    String exchangeName = "it.topic";
    // 消息
    String message = "这里是 中国新闻 !";
    // 发送消息
    rabbitTemplate.convertAndSend(exchangeName, "china.news", message);
}

Topic  Exchange总结:

Direct交换机与Topic交换机的差异:

        - Topic交换机接收的消息RoutingKey必须是多个单词,以 **.** 分割

        - Topic交换机与队列绑定时的bindingKey可以指定通配符

  - #:代表0个或多个词

  - *:代表1个词

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

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

相关文章

Spring WebFlux 核心原理(2-1)

1、Spring 响应式编程 1.1、早期响应式解决方案 响应式编程是构建响应式系统的主要候选方案。Spring 4.x 引入了 ListenableFuture 类,它扩展了 Java Future,并且可以基于 HTTP 请求实现异步执行操作。但是只有少数 Spring 4.x 组件支持新的 Java 8 Com…

Nginx(Linux):服务器版本升级和新增模块

目录 1、概述2、使用Nginx服务信号完成Nginx升级2.1 备份当前版本的Nginx2.2 向服务器导入新的Nginx2.3 向服务器导入新的Nginx2.4 停止老版本Nginx 3、使用Nginx安装目录的make命令完成升级3.1 备份当前版本的Nginx3.2 向服务器导入新的Nginx3.3 执行更新命令 1、概述 如果想…

24最新ComfyUI插件与Lora的下载及使用指南!

前言 本节我们介绍ComfyUI插件和Lora的下载及使用方式。 1. 安装 1.1 Checkpoint安装 将从前面介绍的模型下载平台下载后,放在ComfyUI/models/checkpoints文件夹下。 所有的AI设计工具,安装包、模型和插件,都已经整理好了,&am…

【vue自定义指令】骨架屏指令

场景 预加载的过程中,数据还未请求到,dom已经渲染出来了? 展示效果 实现 封装指令(代码块1) app引入(代码块2)使用(代码块3) 代码 封装 ​ import { reactive, wa…

Spark全网最全总结

Spark 产生之前,已经有 MapReduce 这类非常成熟的计算系统存在了,并提供 了高层次的 API(map/reduce),把计算运行在集群中并提供容错能力,从而实现 分布式计算。 虽然 MapReduce 提供了对数据访问和计算的抽象&#xff0c…

一个月学会Java 第13天 抽象类与接口

Day13 抽象类与接口 通过了前面的学习,我们已经掌握了面向对象的基础 继承 封装 多态 第一章 抽象类 接下来,我们要对面向对象学习高级的部分,我们先要学到的就是抽象类,听名字也能想到,肯定很抽象,那我们先…

电力电子技术(二)

三相可控整流电路:(主要包括三相半波和三相桥式) (一)三相半波: (1.1电阻性负载) 右侧第三个图代表VT1晶闸管的流经电流波形,一个周期仅导通一次:晶闸管导…

Netty讲解与案例

1.Netty简介: 官网:https://netty.io/ Netty 是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和精简了 TCP 和 UDP 套接字服务器等网络编程。 “快速简便”并不意味着最终的应用程序会存在…

Halcon 使用二维像素分类对图像进行分割

文章目录 算子histo_2dim 计算双通道灰度值图像的直方图class_2dim_sup 使用二维像素分类对图像进行分割 示例 算子 histo_2dim 计算双通道灰度值图像的直方图 histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )Regions (输入对象):在此区域内计算直方图…

腾讯云视立方开通各项云服务相关

云直播 如何开通云直播服务? 进入 云直播管理控制台,进入腾讯云直播服务开通页,查看相关协议并勾选同意,单击申请开通即可开通云直播服务。 。 如何开启流防盗链 KEY? 推流防盗链 KEY 是为了确保只有您的 App 用户…

dockerfile 用法全解析

FROM 构建基于alpine的镜像,单条执行就是复制了一个apline镜像(除了FROM其他都是非必须的) WORKDIR 是之指定接下来的shell语句是运行在哪个路径下,没有就会创建目录 COPY 将宿主机指定目录的文件拷贝到镜像指定目录 (ADD 源地址还可以url…

[LeetCode] 662. 二叉树最大宽度

题目描述: 给你一棵二叉树的根节点 root ,返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结…

【C语言刷力扣】2206.将数组划分成相等数对

题目: 解题思路: 题目中要求元素成数对出现,即每个元素出现偶数次。用哈希表存放每个数出现的次数,再循环查看每个数的次数是否位偶数。 typedef struct {int key;int count;UT_hash_handle hh; } hashEntry;bool divideArray(int…

IDEA下载安装

文章目录 1、下载安装包2、安装IDEA3、全局配置4、安装插件 1、下载安装包 IDEA官网下载最新IDEA。 上面的ULtimate是旗舰版,试用30天,之后是需要收费的,下面黑色区域的Community是社区版,功能不如旗舰版丰富,但是好在…

文件的二维码怎么做成?简单的3步生成二维码技巧

数字化时代的到来,用来将内容分享给其他人展示的方式也越来越多。其中二维码就是现在很流行的一种方式,将内容存入二维码后,其他人就可以扫描分享二维码来查看内容,那么文件生成二维码该怎么操作呢? 通过使用文件二维…

如何轻松实现Patreon订阅,获得独家内容

目录 1. 什么是Patreon? Patreon是一个非常流行的在线平台。 它支持内容创作者通过订阅的方式,直接从粉丝那里获取资金支持。无论是艺术家、音乐家,还是作家、视频制作人,都能在这里找到自己的粉丝群体。 简而言之,你可以通过订阅他们定期发布的独家内容,享受到更…

量子噪声与量子操作

由于量子不确定性和量子态的测量过程而引入的随机波动,量子噪声不可避免。 经典噪声 想象一下,一个比特存储在硬盘驱动器上, 它与普通计算机相连,该比特从状态0或1开始,经过长时间,散乱的磁场很可能会导致…

020 elasticsearch7.10.2 elasticsearch-head kibana安装

文章目录 全文检索流程ElasticSearch介绍ElasticSearch应用场景elasticsearch安装允许远程访问设置vm.max_map_count 的值 elasticsearch-head允许跨域 kibana 商品数量超千万,数据库无法使用索引 如何使用全文检索: 使用lucene,在java中唯一…

AI视频监控卫士:一键Docker简易安装,开源技术引领视频监控

AI视频监控卫士的主要应用场景: 我们决定开源的原因: 1. 灵活性与可定制性: 开源产品的代码对用户公开,允许开发者根据特定需求进行自定义和扩展。思通数科AI视频监控卫士作为开源项目,可以灵活适应不同企业或项目的需…