SpringBoot 消息队列RabbitMQ 交换机模式 Fanout广播 Direct定向 Topic话题

介绍

作用是接收生产者发送的消息,并根据某种规则将这些消息路由到一个或多个队列。交换机根据绑定规则和路由键来决定如何将消息分发到队列。简而言之,交换机是消息路由的核心组件,它负责将消息从生产者引导到适当的队列,以便消费者能够处理这些消息。


交换机类型

交换机分为3种类型。

  • Fanout广播 顾名思义将消息广播到交换机绑定的所有队列上,每个队列都可以接收到消息。
  • Direct定向 将消息发生给不同的人,不同的服务接收不同的消息,会根据设置的规则发送给指定的队列,称为定向路由。
  • Topic话题 与 Direct定向不同的是他的routingKey可以是多个单词的列表以" . "分割。
    -在这里插入图片描述

Fanout广播

顾名思义将消息广播到交换机绑定的所有队列上,每个队列都可以接收到消息。
在这里插入图片描述

生产者

    private  final RabbitTemplate rabbitTemplate;@GetMapping("/putRecord") public Result userMessage(){rabbitTemplate.convertAndSend("amq.fanout",null,"我是发送者");//1.交换机  2.路由键   3.消息return  Result.success("操作成功",null);}

对于 fanout 类型的交换机,路由键会被忽略,因为 fanout 类型的交换机会将消息广播到所有绑定到它的队列。所以,在这种情况下,你可以将路由键设为 null 或者直接忽略这个参数。

消费者

@Component
public class RecordQueues {@RabbitListener(queues ="play.queue")public  void  insertUserMessage(String msg){ //支付服务System.out.println("play.queue");}@RabbitListener(queues ="record.queue")public  void  recordUserMessage(String msg){ //记录服务System.out.println("record.queue");}
}
play.queue
record.queue

两个消费者同时收到消息


Direct定向

将消息发生给不同的人,不同的服务接收不同的消息,会根据设置的规则发送给指定的队列,称为定向路由。

  • 每一个队列都与交换机设置一个绑定的键名Key
  • 消息发送着指定消息的路由键名Key
  • 一个队列可以绑定多个键名

这种模式更加的灵活

绑定路由器Key
在绑定队列的时候可以给改队列指定路由键名Key
在这里插入图片描述
一个队列可以绑定多个路由器Key
在这里插入图片描述

生产者

给路由键名为del的队列发送消息,也就是del.queue和delMsg.queue

private  final RabbitTemplate rabbitTemplate;
@GetMapping("/putRecord") //插入记录
public Result userMessage(){rabbitTemplate.convertAndSend("amq.direct","del","我是发送者");return  Result.success("操作成功",null);
}

消费者

@Component
public class RecordQueues {@RabbitListener(queues ="add.queue")public  void  a(String msg){ //支付服务System.out.println("add.queue");}@RabbitListener(queues ="del.queue")public  void  b(String msg){ //记录服务System.out.println("query.queue");}@RabbitListener(queues ="delMsg.queue")public  void  c(String msg){ //记录服务System.out.println("delMsg.queue");}}
delMsg.queue
query.queue

Topic话题

Direct定向不同的是他的routingKey可以是多个单词的列表以" . "分割。可以用他区分消息的类型或分组。

通过指定通配符绑定

  • #代指0个或多个单词
  • * 代指一个单词

例子
假如有以下routingKey(路由键名)
a.a123
a.a147
a.a369
b.b123
b.789
c.123
这个时候想给axx等发信息,可以使用Topic交换机指定a发信息,axx下的队列都会收到。

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

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

相关文章

防火墙--NAT技术,基于源NAT,NAT服务器,双向NAT

文章目录 防火墙--NAT技术一、基于源NAT**方式**:NAT No-PATNAPT出接口地址方式Smart NAT三元组 NAT 二、基于服务器的NAT多出口场景下的NAT Server 三、双向NAT 防火墙–NAT技术 基于源NAT:用于将内部网络的私有IP地址转换为公共IP地址,以便…

[Meachines] [Easy] Sauna DC域+AS-REP+TGT票证窃取+AutoLogon凭据+DCSync攻击

信息收集 IP AddressOpening Ports10.10.10.175TCP:53,80,88,135,139,389,445,464,593,3268,3269,5985 $ nmap -p- 10.10.10.175 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 53/tcp open domain? | fingerprint-strings: | DNSVersionBindReqTCP…

如何处理模型API速率限制

引言 当我们访问大模型相关的API服务时,通常会遇到速率限制(即限流),它用于防止用户向某个API发送大量请求,防止请求过载,确保每个人都能公平地访问API。 速率限制的方式 速率限制通常有以下几种形式: RPM(request…

详解HTTP/HTTPS协议

HTTP HTTP协议全名为超文本传输协议。HTTP协议是应用层协议,其传输层协议采用TCP协议。 请求—响应模型 HTTP协议采用请求-响应模型,通常由客户端发起请求由服务端完成响应。资源存储在服务端,客户端通过请求服务端获取资源。 认识URL 当…

Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘

摘要:大家在Linux上用Docker部署项目的时候,有时候会部署多个项目,系统盘空间不足,数据盘又挂载有很多空间,这时候就会想要将 Docker 镜像和容器数据迁移到数据盘,本文主要讲解迁移步骤和迁移过程中遇到的一…

vue2的diff算法

Vue2 的虚拟 DOM diff 算法是一种高效的算法,用于比较新旧两个虚拟 DOM 树,找出差异并更新到真实 DOM 上。这个算法的核心在于尽量减少不必要的 DOM 操作,提高性能。 虚拟dom:把DOM数据化,先通过不断地操作数据&#…

数据集 CULane 车道线检测 >> DataBall

数据集 CULane 车道线检测 自动驾驶 无人驾驶目标检测 CULane是用于行车道检测学术研究的大规模具有挑战性的数据集。它由安装在六辆由北京不同驾驶员驾驶的不同车辆上的摄像机收集。收集了超过55小时的视频,并提取了133,235帧。数据示例如上所示。我们将数据集分为…

【C++算法】前缀和

前缀和 题目链接 前缀和https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId230&tqId2021480&ru/exam/oj&qru/ta/dynamic-programming/question-ranking&sourceUrl%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%2…

传神论文中心|第25期人工智能领域论文推荐

在人工智能领域的快速发展中,我们不断看到令人振奋的技术进步和创新。近期,开放传神(OpenCSG)传神社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自…

Java-idea小锤子图标

这一版的idea小锤子图标其实就在这里 点进去就找到了~

mtk7628 网口灯问题

板子上电插入网线到网口,只有wan口灯会亮,插入lan口灯不会亮。对比了ok的代码,先对比设备树,未看到网口相关的GPIO。 mt7628an_WMD-7688A-12816.dts mt7628an_hilink_hlk-7628n.dts 继续查看网口相关代码,加打印&…

在实际LabVIEW开发中,哪些算法是常用的?

在LabVIEW的实际开发中,常用的算法主要集中在数据处理、控制系统、信号处理、图像处理等领域。以下是一些常用算法的介绍: 1. PID控制算法 PID(比例-积分-微分)控制是LabVIEW中常用的算法之一,广泛应用于工业自动化和…

Leetcode—1184. 公交站间的距离【简单】

2024每日刷题&#xff08;161&#xff09; Leetcode—1184. 公交站间的距离 实现代码 class Solution { public:int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {int clockwise 0;int counterclockwise 0;if(start > desti…

华为防火墙智能选路篇之链路权重(带宽)负载分担

基于链路的权重负载分担&#xff08;真机演示&#xff09; 这里博主采用真机演示&#xff0c;模拟器只能配置没办法模拟出效果&#xff0c;真机能够真实的体验出效果&#xff0c;更好的去理解&#xff0c;所以这边采用真机配置了。环境简化了&#xff0c;防火墙内网接了一台测试…

Zookeeper工作机制和特点

1. Zookeeper工作机制 Zookeeper从设计模式角度来理解&#xff1a; 是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的 注册&#xff0c;一旦这些数据的状态发生变化&#xff0c;Zookeeper就将负责通知…

2-3.Android 存储之存储空间(私有空间、公共空间)

一、内部存储与外部存储 内部存储指位于设备的内部存储空间 外部存储指位于设备的外部存储介质&#xff0c;例如&#xff0c;SD 卡 简单理解&#xff0c;内部存储就是存储在手机自身&#xff0c;外部存储就是存储在手机可以外接的东西&#xff0c;好比电脑的硬盘和 U 盘 二、…

Scratch教学案例 —— 制作生日蛋糕

小虎鲸Scratch资源站-免费少儿编程Scratch作品源码,素材,教程分享网站! 简介 在这个教学案例中&#xff0c;我们将使用Scratch制作一个简单而有趣的生日蛋糕动画。通过这个项目&#xff0c;学生可以学习到如何使用Scratch中的基本编程块进行角色控制、造型切换、舞台背景设置以…

CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)

一、界面预览 1.1 设置透明(整个页面透明80%示例) 限制输入值:10-100(数字太小会不好看见) 1.2 vue标题栏 //注册类与js调用 (async function(

如何从 GitHub 上克隆项目

GitHub 是一个广泛使用的代码托管平台&#xff0c;开发者们可以在上面共享和管理他们的代码。如果你想要快速获取一个项目的代码&#xff0c;可以通过克隆&#xff08;clone&#xff09;仓库来实现。本文将详细介绍如何从 GitHub 上克隆项目的步骤。更多内容&#xff0c;请查询…

中介者模式:提升代码可维护性的利器

一&#xff0c;介绍 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个中介者对象来封装一系列对象之间的交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;可以独立地改变它们之间的交互。 …