【中间件】RabbitMQ入门

📝个人主页:五敷有你
🔥系列专栏:中间件
⛺️稳中求进,晒太阳

MQ的优劣:
优势
- 应用解耦:提升了系统容错性和可维护性
- 异步提速:提升用户体验和系统吞吐量
- 消峰填谷:提升系统稳定性
劣势
- 系统可用性降低
- 系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响,如何保证MQ的高可用
- 系统复杂度提高
- MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是拖过MQ进行异步调用,如何保证消息没有被重复消费?怎么处理消息丢失情况?怎么保证消息传递的顺序性?
- 一致性问题
- A系统处理完业务,通过MQ给B、C、D系统发送数据,如果B系统,C系统处理成功,D系统处理失败,如何保证消息数据处理的一致性。
既然MQ有优势也有劣势,那么怎么使用MQ需要满足什么条件呢?
- 生产者不需要从消费者处获得反馈,引入消息队列之前直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了,继续往后走,即所谓异步成了可能
- 容许短暂的不一致性
- 确实是用了有效果,即解耦、提速、晓峰方面的收益,超过了加入MQ,管理MQ的成本
常见的MQ产品

RabbitMQ简介
AMQP
AMQP,即Advanced Message Queuing Protocol ,是一个网络协议,是应用层协议的一个开发标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

RabbitMQ的基础架构

相关概念
- Broker:接收和分发消息的应用,RabbitMQ Server就是Message Broker
- Virtual host:出于多租户和安全因素的考虑,把AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。
- Connection:publisher/consumer和broker之间的TCP连接
- Channel:如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低,Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel ,所以channel之间是完全隔离的,Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销
- Exchange:message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去,常用的类型有:direct,topic,
- Queue:消息最终被送到这里等待consumer被取走
- Binding:exchange 和 queue 之间的虚拟连接,binding中可以包含routing key 。Binding信息被保存到exchange中的查询表中,用于message的分发依据
RabbitMQ的6中工作模式

JMS
- JMS,即Java消息服务(JavaMessage Service) 应用程序接口,是一个Java平台中关于面向中间件的API
- JMS是JavaEE规范的一种,类似JDBC
- 很多中间件都实现类JMS规范.
快速入门

这个直接通过队列进行通信的
- 引入spring-boot-starter-amqp
- 配置rabbitmq服务端信息
spring:rabbitmq:host: ipport: 5672virtual-host: /username: MeetRyspassword: 123456
- 利用RabbitTemplate发送消息
@Autowired
private RabbitTemplate rabbitTemplate;@Test
void testSendMessage2Queue() {String queueName1 = "MeetRys01";String queueName2 = "MeetRys02";String msg = "hello word";rabbitTemplate.convertAndSend(queueName1, msg);rabbitTemplate.convertAndSend(queueName1,msg);}
2.利用@RabbitListener注解声明要监听的队列
@Slf4j
@Component
public class MqListener {@RabbitListener(queues = "MeetRys01")public void listenSimpleQueue(String msg){System.out.println("消费者1收到了MeetRys01的消息:【" + msg +"】");}}

相关文章:
【中间件】RabbitMQ入门
📝个人主页:五敷有你 🔥系列专栏:中间件 ⛺️稳中求进,晒太阳 MQ的优劣: 优势 应用解耦:提升了系统容错性和可维护性异步提速:提升用户体验和系统吞吐量消峰填谷࿱…...
rtt的io设备框架面向对象学习-电阻屏LCD设备
目录 1.8080通信的电阻屏LCD设备1.1 构造流程1.2 使用2.i2c和spi通信的电阻屏LCD 电阻屏LCD通信接口有支持I2c、SPI和8080通信接口的。 1.8080通信的电阻屏LCD设备 lcd这块不像其他设备类,rtt没有实现的设备驱动框架层,那么是在驱动层直接实现的。 以…...
商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...
蓝桥杯刷题--python-16
562. 壁画 - AcWing题库 Tint(input()) j1 while(j<T): N int(input()) ainput() s [0]*(N1) # 求前戳和 for i in range(1, N 1): s[i] int(a[i-1]) s[i - 1] # 枚举 # 区间 max_ float(-inf) k (N 2 - 1) // 2 for i in …...
闰年计算中的计算机Bug
不知道你有没有看过凯瑟琳泽塔琼斯主演的《偷天陷阱》,里面主题思想是用银行结算系统的千年虫bug,精心设计,盗取银行几十亿的精彩动作片。所谓2000 年千禧年的千年虫,其实就是计算机计算闰年的bug。 这个闰年计算的历史源远流长&…...
python水表识别图像识别深度学习 CNN
python水表识别,图像识别深度学习 CNN,Opencv,Keras 重点:项目和文档是本人近期原创所作!程序可以将水表图片里面的数据进行深度学习,提取相关信息训练,lw1.3万字重复15%,可以直接上交那种&…...
Java对接快递100实时快递单号查询API接口
目录 1.引入依赖 2.定义配置信息 3.模块结构 4.Controller 5.Service实现类 6.返回数据dto以及dto中的数据dto 7.测试运行 今天也是接到了这个任务,官网有小demo,可以下载下来参考test中代码 官方文档地址: 实时快递查询接口技术文档…...
Redis常见的15个【坑】,避坑指南
一、常见命令 1.1 过期时间意外丢失 原因: SET命令如果不设置过期时间,那么Redis会自动【擦除】这个key的过期时间 1.2 DEL命令阻塞redis key是String类型时,DEL时间复杂度是O(1)key是List/Hash/Set/ZSet类型,DEL时间复杂度是…...
04. Nginx入门-Nginx WEB模块
测试环境 此处使用的yum安装的Nginx路径。 此处域名均在本地配置hosts。 主配置文件 路径:/etc/nginx/nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connection…...
Python在信息安全领域中具有重要的作用
Python在信息安全领域中具有重要的作用。下面是几个方面的说明: 网络安全:Python提供了一系列用于网络安全的库和工具,例如Scapy、Nmap等。这些工具可以应用于漏洞扫描、网络流量分析、数据包嗅探等操作,帮助检测和防御网络攻击。…...
Linux 定时备份文件到另一台服务器
1. 需求 用户要求将 Tomcat 的日志文件定时备份到另一台服务器。同事给我提供了一个写好的 java 框架,但实在不想给用户再维护另一个服务了,所以另寻他法。 2. 问题 使用 scp 等跨服务器传输命令时需要手动输入用户名的密码才可进行文件传输ÿ…...
C++输入输出(I\O)
我们知道C是由C语言发展而来的,几乎完全兼容C语言,换句话说,你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言,C在C语言之上增加了面向对象以及泛型编程机制,因此C更适合中大型程序的开发,然而C…...
基本设计模式
单例模式 ES5 function Duck1(name:string){this.namenamethis.instancenull }Duck1.prototype.getNamefunction(){console.log(this.name) }Duck1.getInstancefunction(name:string){if(!this.instance){this.instance new Duck1(name)} } const aDuck1.getInstance(a) const…...
双通道音频功率放大电路,外接元件少, 通道分离性好,3V 的低压下可正常使用——D2025
D2025 为立体声音频功率放大集成电路,适用于各类袖珍或便携式立体声 收录机中作功率放放大器。 D2025 采用 DIP16 封装形式。 主要特点: 适用于立体声或 BTL 工作模式 外接元件少 通道分离性好 电源电压范围宽(3V~12V ÿ…...
Linux 内核获取函数size
方式一:通过objdump -t直接从目标文件中获取函数size #objdump -t file_unread.o | grep hook 0000000000000030 l F .text 000000000000012f hook_vfs_read0000000000000030 l F .text 000000000000012f hook_vfs_read各个字段说明 0000000000000030&#x…...
Python+neo4j构建豆瓣电影知识图谱
文章目录 数据来源数据整理导入节点和关系导入使用Subgraph批量导入节点和关系多标签实体和实体去重数据来源 http://www.openkg.cn/dataset/douban-movie-kg 该网址拥有丰富的中文知识图谱数据集,OpenKG(Open Knowledge Graph),可供研究人员使用研究。 数据整理导入 impor…...
DolphinScheduler——介绍及架构设计
目录 一、DolphinScheduler介绍 1.1 概述 1.2 特性 1.2.1 简单易用 1.2.2 丰富的使用场景 1.2.3 High Reliability 1.2.4 High Scalability 1.3 名词解释 1.3.1 名词解释 1.3.2 模块介绍 二、DolphinScheduler架构原理 2.1 系统架构图 2.2 架构说明 2.2.1 Maste…...
【Python】约瑟夫环问题
任务描述 据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在…...
Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘
Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…...
基于springboot+vue的医院药品管理系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
达梦数据库-统计信息收集-记录
达梦数据库-统计信息收集-记录总结 1统计信息收集 统计信息主要是描述数据库中表和索引的大小及数据分布状况等信息。比如:表的行数、块数、平均每行的大小、索引的高度、叶子节点数以及索引字段的行数等。统计信息对于CBO(基于代价的优化器࿰…...
远程办公远控软件怎么选?ToDesk、向日葵、UU远程深度对比
远程办公远控软件怎么选?ToDesk、向日葵、UU远程深度对比远程办公这件事,现在很多人已经习惯了。但很多人忽略了一个问题——远程办公体验好不好,很大程度上取决于你用的远控软件怎么样。我之前帮公司选远控工具的时候,认真把市面…...
焦度计的柱镜值是怎么算出来的
项目一直卡在柱镜值的准确性和重复性这里,柱镜值究竟要怎么写代码才能算出来啊?...
2026毕业答辩PPT模板实测:三个平台的真实体验与避坑建议
又到毕业答辩季,不少同学论文写完了,却被PPT卡住:排版乱、配色杂、结构不清,明明内容扎实,呈现效果却大打折扣。作为经常接触办公工具的博主,我实测了几个常见的PPT模板与制作平台,重点针对本科…...
MPV_lazy终极指南:如何用懒人包快速提升视频播放体验?
MPV_lazy终极指南:如何用懒人包快速提升视频播放体验? 【免费下载链接】mpv_PlayKit 🔄 mpv player 播放器折腾记录 Windows conf | 中文注释配置 汉化文档 快速帮助入门 | mpv-lazy 懒人包 Win11 x64 config | 着色器 shader 滤镜 filter 整…...
手写一个AI代码审查员:Claude Agent SDK + MCP 深度实战
引言2026年5月,Anthropic做了一件意味深长的事:把 Claude Code SDK 改名为 Claude Agent SDK。改名背后是一个判断——这不再是"帮你写代码的工具",而是一个能自主读代码、分析逻辑、修改文件、跑测试、甚至提PR的AI Agent编排框架…...
Minecraft性能监控终极指南:如何用Spark快速诊断服务器卡顿
Minecraft性能监控终极指南:如何用Spark快速诊断服务器卡顿 【免费下载链接】spark A performance profiler for Minecraft clients, servers, and proxies. 项目地址: https://gitcode.com/gh_mirrors/spark6/spark Minecraft服务器性能优化一直是管理员面临…...
毕业设计 深度学习的人体跌倒检测与识别(源码+论文)
文章目录 0 前言1 项目运行效果2 相关技术原理2.1卷积神经网络2.2 YOLO简介2.3 YOLOv5s 模型算法流程和原理2.4 数据集处理数据标注简介数据保存 2.5 模型训练 4 最后 0 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创…...
对比直接使用官方 API,Taotoken 在计费透明性上的优势体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用官方 API,Taotoken 在计费透明性上的优势体验 对于需要调用多种大语言模型的开发者而言,成本控…...
遥感影像分割选哪个?eCognition里8种方法(棋盘、多尺度、分水岭...)的实战避坑指南
遥感影像分割实战指南:eCognition八大算法深度解析与选型策略 1. 遥感影像分割的技术演进与核心挑战 在数字地球时代,高分辨率遥感影像已成为地理信息提取的重要数据源。与传统基于像素的分类方法相比,面向对象影像分析(OBIA&am…...
