【中间件】RabbitMQ入门

  

       📝个人主页:五敷有你      

 🔥系列专栏:中间件

⛺️稳中求进,晒太阳

MQ的优劣:

优势

  1. 应用解耦:提升了系统容错性和可维护性
  2. 异步提速:提升用户体验和系统吞吐量
  3. 消峰填谷:提升系统稳定性

劣势

  1. 系统可用性降低
    1. 系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响,如何保证MQ的高可用
  2. 系统复杂度提高
    1. MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是拖过MQ进行异步调用,如何保证消息没有被重复消费?怎么处理消息丢失情况?怎么保证消息传递的顺序性?
  3. 一致性问题
    1. A系统处理完业务,通过MQ给B、C、D系统发送数据,如果B系统,C系统处理成功,D系统处理失败,如何保证消息数据处理的一致性。

既然MQ有优势也有劣势,那么怎么使用MQ需要满足什么条件呢?

  1. 生产者不需要从消费者处获得反馈,引入消息队列之前直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了,继续往后走,即所谓异步成了可能
  2. 容许短暂的不一致性
  3. 确实是用了有效果,即解耦、提速、晓峰方面的收益,超过了加入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规范.

快速入门

这个直接通过队列进行通信的

  1. 引入spring-boot-starter-amqp
  2. 配置rabbitmq服务端信息
spring:rabbitmq:host: ipport: 5672virtual-host: /username: MeetRyspassword: 123456
  1. 利用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 +"】");}}

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

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

相关文章

【LeetCode 算法专题突破】---二分查找(⭐⭐⭐)

前言 我在算法题目的海洋中畅游已久,也曾在算法竞赛中荣获佳绩。然而,我发现自己对于算法的学习,还缺乏一个系统性的总结和归类。尽管我已经涉猎过不少算法类型,但心中仍旧觉得有所欠缺,未能形成完整的算法体系。 因…

问题解决 | vscode无法连接服务器而ssh和sftp可以

解决步骤 进入家目录删除.vscode-server rm -rf .vscode-server 然后再次用vscode连接服务器时,会重新安装,这时可能报出一些缺少依赖的错 需要联系管理员安装相关依赖,比如 sudo apt-get install libstdc6 至此问题解决

【数据结构】单链表的层层实现!! !

关注小庄 顿顿解馋(●’◡’●) 上篇回顾 我们上篇学习了本质为数组的数据结构—顺序表,顺序表支持下标随机访问而且高速缓存命中率高,然而可能造成空间的浪费,同时增加数据时多次移动会造成效率低下,那有什么解决之法呢&#xff…

打造经典游戏:HTML5与CSS3实现俄罗斯方块

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

机器学习开源分子生成系列(1)-DeepFrag的本地部署及使用

欢迎浏览我的CSND博客! Blockbuater_drug …进入 文章目录 前言一、DeepFrag是什么?二、conda中安装DeepFrag CLI环境1. 创建环境并激活2. 下载pre-trained model3. DeepFrag CLI 使用方法必需参数:可选参数: 4. DeepFrag CLI 使用…

带摄像头的 AirPods,苹果会怎么做出来?

苹果对智能产品的设计,正在放飞自我。 根爆料,苹果在「未来设备」的规划里,有两个大胆的想法: 一是带有屏幕的 HomePod 正在研发中,当中将集成 Apple TV、FaceTime 等重多功能;二是配备摄像头的 AirPod…

201909青少年软件编程(Scratch)等级考试试卷(三级)

青少年软件编程(Scratch)等级考试试卷(三级)2019年9月 第1题:【 单选题】 执行下面的脚本后,变量“分数”的值是多少?() A:5 B:6 C:10 D:25 【正确答案】: C 【试题…

[java基础揉碎]super关键字

super关键字: 基本介绍 super代表父类的引用,用于访问父类的属性、方法、构造器 super给编程带来的便利/细节 1.调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化) 2.当子类中有和父类中的成员(属性和方法)重…

新零售SaaS架构:订单履约系统架构设计(万字图文总结)

什么是订单履约系统? 订单履约系统用来管理从接收客户订单到将商品送达客户手中的全过程。 它连接了上游交易(客户在销售平台下单环)和下游仓储配送(如库存管理、物流配送),确保信息流顺畅、操作协同&…

UDP实现文件的发送、UDP实现全双工的聊天、TCP通信协议

我要成为嵌入式高手之3月7日Linux高编第十七天!! ———————————————————————————— 回顾 重要程序 1、UDP实现文件的发送 发端: #include "head.h"int main(void) {int sockfd 0;struct sockaddr_i…

141 Linux 系统编程18 ,线程,线程实现原理,ps –Lf 进程 查看

一 线程概念 什么是线程 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:有独立的PCB,但没有独立的地址空间(共享) 区别:在于是否共…

一周学会Django5 Python Web开发-Django5内置模板引擎-模板上下文变量

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计32条视频,包括:2024版 Django5 Python we…

瑞芯微 | I2S-音频基础 -1

最近调试音频驱动,顺便整理学习了一下i2s、alsa相关知识,整理成了几篇文章,后续会陆续更新。 喜欢嵌入式、Li怒晓得老铁可以关注一口君账号。 1. 音频常用术语 名称含义ADC(Analog to Digit Conversion)模拟信号转换…

第五十三回 入云龙斗法破高廉 黑旋风下井救柴进-AI训练数据处理和读取

罗真人教了公孙胜五雷天罡正法,并让他记住“逢幽而止,遇汴而环”八个字。三人辞别了罗真人,戴宗先回去报信,李逵和公孙胜结伴而行。 走了三天,来到了武冈镇,李逵碰到一个铁匠,叫金钱豹子汤隆&a…

启动查看工具总结

启动目标:2s内优秀,2-5s普通,之后的都需要优化,热启动则是1.5s-2s内 1 看下大致串联启动流程: App 进程在 Fork 之后,需要首先执行 bindApplication Application 的环境创建好之后,就开始activ…

去电脑维修店修电脑需要注意什么呢?装机之家晓龙

每当电脑出现故障时,你无疑会感到非常沮丧。 如果计算机已过了保修期,您将无法享受制造商的免费保修服务。 这意味着您必须自费找到一家电脑维修店。 去电脑维修店并不容易。 大家一定要知道,电脑维修非常困难,尤其是笔记本电脑维…

C#,数值计算,解微分方程的龙格-库塔四阶方法与源代码

Carl Runge Martin Wilhelm Kutta 1 龙格-库塔四阶方法 数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔龙格和马丁威尔海姆库塔于1900年左右发明。 对于一阶…

Python 全栈系列232 再次搭建RabbitMQ

说明 最近想重新上RabbitMQ,主要目的还是为了分布式任务调度。在Kafka和RabbitMQ两者犹豫了一下,还是觉得RabbitMQ好一些。 在20年的时候有搞过一阵子的RabbitMQ,看了下当时的几篇文章,觉得其实想法一直没变过。 Python - 装机系列24 消息…

贪心算法(greedy algorithm,又称贪婪算法)详解(附例题)

目录 基本思想一)概念二)找出全局最优解的要求三)求解时应考虑的问题四)基本步骤五)贪心策略选择六)实际应用 1.零钱找回问题2.背包问题3.哈夫曼编码4.单源路径中的Djikstra算法5.最小生成树Prim算法 基本…

构建留学平台技术架构:从设计到实现

随着全球化进程的加速和人们对国际教育的需求不断增长,留学行业也迎来了快速发展的机遇。作为留学服务的重要组成部分,留学平台的技术架构设计至关重要。本文将探讨留学平台技术架构的设计和实现过程,以及相关的技术选择、挑战和解决方案。 …