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

RabbitMQ 5种工作模式介绍和Springboot具体实现

 RabbitMQ有5中工作模式:简单模式、工作队列模式、发布/订阅模式、路由模式和主题模式

简单模式(Simple Mode)

简单模式是最基本的工作模式,也是最简单的模式。在简单模式中,生产者将消息发送到一个队列中,然后消费者从该队列中接收并处理消息。这种模式下,一个生产者可以发送多个消息,但只有一个消费者能够接收和处理这些消息。简单模式适用于单个生产者和单个消费者的场景。

具体实现

1. 导入依赖、在依赖文件配置rabbitmq(消费者和生产者程序都要实现)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
spring:rabbitmq:   host: 192.168.10.100 # 自己的虚拟机IPport: 5672 # 端口virtual-host: /root # 虚拟主机username: root # 用户名password: root # 密码

2. 创建消费者(一个程序)

@Component
public class SimpleModeProducer {@Autowiredprivate RabbitTemplate rabbitTemplate;//注入中央类public void sendMessage(String queueName, String message) {rabbitTemplate.convertAndSend(queueName, message);System.out.println("发送的消息: " + message);}
}

3.创建消费者(另一个程序)

@Component
public class SimpleModeConsumer {@RabbitListener(queues = "simple.queue")//监听队列,自动检测public void receiveMessage(String message) {System.out.println("接收到的消息: " + message);}
}

4. 测试(在生产者程序)

@SpringBootTest
public class SimpleModeTest {@Autowiredprivate SimpleModeProducer producer;@Testpublic void testSimpleMode() {producer.sendMessage("simple.queue","hello, rabbitmq!");}
}

工作队列模式(Work Queue Mode)

工作队列模式也被称为任务队列模式,在工作队列模式中,生产者将消息发送到一个队列中,多个消费者同时监听该队列,并竞争地接收消息进行处理。每个消息只能被一个消费者接收,确保消息的唯一性。工作队列模式可以实现任务的并行处理,提高系统的处理能力。

发布/订阅模式(Publish/Subscribe Mode)

发布/订阅模式将消息发送到交换机(exchange),然后交换机将消息广播给所有绑定的队列。每个队列都有自己的消费者,从而实现了消息的广播。在发布/订阅模式中,生产者将消息发送到交换机,而不是直接发送到队列。交换机根据绑定的队列将消息进行广播。这种模式适用于需要将消息广播给多个消费者的场景。

路由模式(Routing Mode)

路由模式在发布/订阅模式的基础上增加了路由键(routing key)的概念。生产者将消息发送到交换机,并指定一个路由键。交换机根据路由键的匹配规则将消息发送到相应的队列。消费者可以选择订阅特定的路由键,只接收符合条件的消息。这种模式适用于需要根据消息的属性或条件进行消息路由的场景。

主题模式(Topic Mode)

主题模式是路由模式的扩展,它使用通配符来匹配路由键。生产者将消息发送到交换机,并指定一个主题(topic)。交换机根据主题的模式匹配将消息发送到符合条件的队列。主题模式可以实现更灵活的消息路由,可以根据不同的主题将消息发送给不同的队列。这种模式适用于需要根据消息的主题进行灵活路由的场景。

相关文章:

RabbitMQ 5种工作模式介绍和Springboot具体实现

RabbitMQ有5中工作模式&#xff1a;简单模式、工作队列模式、发布/订阅模式、路由模式和主题模式 简单模式&#xff08;Simple Mode&#xff09; 简单模式是最基本的工作模式&#xff0c;也是最简单的模式。在简单模式中&#xff0c;生产者将消息发送到一个队列中&#xff0c;…...

C++ - 可变模版参数 - emplace相关接口函数 - 移动构造函数 和 移动赋值运算符重载 的 默认成员函数

可变模版参数 我们先来了解一下&#xff0c;可变参数。可变参数就是在定义函数的时候&#xff0c;某一个参数位置使用 "..." 的方式来写的&#xff0c;在库当中有一个经典的函数系列就是用的 可变参数&#xff1a;printf&#xff08;&#xff09;系列就是用的可变参…...

总结三:计算机网络面经

文章目录 1、简述静态路由和动态路由&#xff1f;2、说说有哪些路由协议&#xff0c;都是如何更新的&#xff1f;3、简述域名解析过程&#xff0c;本机如何干预域名解析&#xff1f;4、简述 DNS 查询服务器的基本流程是什么&#xff1f;DNS 劫持是什么&#xff1f;5、简述网关的…...

服务器数据恢复-VMWARE ESX SERVER虚拟机数据恢复案例

服务器数据恢复环境&#xff1a; 几台VMware ESX SERVER共享一台某品牌存储&#xff0c;共有几十组虚拟机。 服务器故障&#xff1a; 虚拟机在工作过程中突然被发现不可用&#xff0c;管理员将设备进行了重启&#xff0c;重启后虚拟机依然不可用&#xff0c;虚拟磁盘丢失&#…...

COCI 2021-2022 #1 - Set 题解

思路 我们将原题中的数的每一位减一&#xff0c;此时问题等价。 下面的异或都是在三进制下的异或。&#xff08;相当于不进位的加法&#xff09; 我们考虑原题中的条件&#xff0c;对于每一位&#xff0c;如果相同&#xff0c;则异或值为 0 0 0&#xff0c;如果为 1 1 1&a…...

分享40个极具商业价值的chatGPT提问prompt

原文&#xff1a;分享40个极具商业价值的chatGPT提问prompt | 秋天的童话博客 1、分析并改善定价策略 提示: "分析我当前的[插入产品或服务]定价策略。提出改进建议&#xff0c;并帮助我制定新的定价策略&#xff0c;以最大化利润和客户满意度。" Analyze and Imp…...

一文搞懂到底什么是元宇宙

一、背景 2021年&#xff0c;“元宇宙”是科技界的开端。 2021”元宇宙”这个词在Facebook更名后被点燃了&#xff0c;无疑是21世纪科技界最爆的起点。各式各样的定义、解读都出现了&#xff0c;有人说它是炒作&#xff0c;甚至是骗局&#xff0c;但也有人说它就是互联网的未…...

【重拾C语言】六、批量数据组织(四)线性表—栈和队列

目录 前言 六、批量数据组织——数组 6.1~3 数组基础知识 6.4 线性表——分类与检索 6.5~7 数组初值&#xff1b;字符串、字符数组、字符串数组&#xff1b;类型定义 typedef 6.8 线性表—栈和队列 6.8.1 栈&#xff08;Stack&#xff09; 全局变量 isEmpty() isFull…...

力扣刷题-哈希表-一个字符串是否能够由另一个字符串中的字符组成

383 赎金信 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。ransomNote 和 magazin…...

Android使用AOP切面编程

在Android应用程序中&#xff0c;AOP可以被用于许多不同的场景&#xff0c;例如日志记录、权限控制、性能分析等。下面是一个简单的例子&#xff0c;说明如何在Android应用程序中使用AOP切面编程。 首先&#xff0c;我们需要在应用程序中引入AspectJ库。我们可以使用Gradle来完…...

Flutter学习笔记

此篇文章用来记录学习Flutter 和 Dart 相关知识 零.Dart基本数据类型 Dart 是一种静态类型的编程语言&#xff0c;它提供了一系列基本数据类型&#xff0c;用于存储和操作不同种类的数据。以下是 Dart 中的一些基本数据类型以及它们的详细介绍&#xff1a; 1. 整数类型&#…...

软件生命周期中的概念设计和详细设计的主要任务是什么

基础概念 在软件生命周期中&#xff0c;概念设计和详细设计是软件设计阶段中的两个重要环节。 概念设计阶段的主要任务是从业务需求出发&#xff0c;将系统的基本概念、主要功能和关键特性进行抽象和定义。概念设计旨在确定系统的整体架构和关键模块&#xff0c;包括以下主要…...

大数据学习(2)Hadoop-分布式资源计算hive(1)

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…...

深入探究HTML表单与JavaScript的关系

深入探究HTML表单与JavaScript的关系 引言 HTML表单是网页中数据收集的重要工具&#xff0c;而JavaScript则充当着这些数据的处理者和控制者的角色。二者之间的关系非常紧密&#xff0c;共同构成了现代Web应用中用户交互的基础。在这篇博客中&#xff0c;我们将详细地解析HTM…...

关于Jupyter notebook 创建python3 时进去不能重命名问题及不能编程问题

首先写这篇博客时&#xff0c;已经被这个问题折磨了三天&#xff0c;看了很多博客&#xff0c;其实解决这个问题的关键就是要么没有下pyzmq或者等级太高&#xff0c;要么等级太低&#xff0c;首先我会按照我思路来。 问题如图&#xff1a; 1.自动换行 2.不能重命名 我的解决办…...

一些可以用代码绘制流程图的工具

代码绘制流程图的工具有很多,以下是一些常用的工具: Mermaid:Mermaid 是一个基于 Markdown 的图表语言,可以生成各种类型的图表,包括流程图、时序图、甘特图等。Mermaid 可以使用 JavaScript 或 TypeScript 进行编写,可以通过 Node.js 运行。Graphviz:Graphviz 是一个开…...

Centos中清除因程序异常终止,导致的残留的Cache/buff_drop_caches命令---linux工作笔记063

我这里因为nifi程序背压设置的不合理,导致,内存和CPU消耗过高,系统崩溃,但是重启NIFI以后,发现 对应的执行top命令,看到,系统的buff/cache 依然没有减少,说明内存被浪费了,残留在这里没有被回收. 用这个办法执行这个命令; linux会自动触发清理,但是只有在内存不够用的时候才会…...

Element-UI的使用——表格el-table组件去除边框、滚动条设置、隔行变色、去除鼠标悬停变色效果(基于less)

// Element-ui table表格去掉所有边框,如下&#xff1a; // 备注&#xff1a;若去掉所有边框&#xff0c;可自行将头部边框注释掉即可 // 该样式写在style scoped外面在el-table 中添加class"customer-table"类名 //去掉每行的下边框/deep/ .el-table td.el-table__c…...

python的一些知识点

之前自学过python&#xff0c;学了一些基本语法&#xff0c;但忘得厉害。最近&#xff0c;在努力地写代码&#xff0c;在学代码&#xff0c;写代码中学习python&#xff0c;为此记录一些关于python的知识点。...

QML 带框最大化显示方法

1.QML窗口最大化很多会给出如下方法: visibility: "FullScreen" 此方法不好的方面是没有最大化&#xff0c;最小化&#xff0c;关闭按钮 2.通过showMaximized() 方法可以满足我们需求:在onCompleted 方法中执行 实现的效果如下:...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...