RabbitMQ入门教学(浅入浅出)

进程间通信

互联网的通讯时网络的基础,一般情况下互联网的资源数据对储存在中心服务器上,一般情况下个体对个体的访问仅限于局域网下,在公网即可完成资源的访问,如各种网站资源,下载资源,种子等。网络通讯都是基于应用程序到应用程序的通讯,例如访问网页必须要借助浏览器,各种手机app,pc端应用等。应用程序使用http协议或者tpc/udp协议实现通讯。

在往小的说就是应用程序内部线程的通讯了,一般来说一个应用程序有一个进程,一般一个进程包含多个线程,若干线程服务与进程共同完成进程的功能,显然都是为进程服务,那么线程之间的通讯是无法避免的,最常见的就是共享数据,多个线程对对同一数据操作。

了解微服务的可以知道rpc协议,这个也是进程的通讯,但不同的是rpc协议不是面向数据的而是面相方法的,rpc为远程过程调用,能够想调用本地的方法一样调用远程机器上的方法,若把方法比作线程,那么rpc就是实现远程主机的线程调用。

对与本机上各个线程协调来完成进程的任务,因此线程通讯是必要的,这里的线程通讯是远程的线程通讯,在同一主机上,线程就好比各个方法,在开发阶段方法互相调用就实现了数据共享,并存在与计算机的内存中,只有在远程线程通讯时才需要考虑安全,准确,快捷等特性。

消息队列

上一节说到线程通讯服务于进程,那么线程之间必须要通讯,线程通讯最主要的方式就是数据共享。那么如何实现数据共享并保证书的准确性呢?

远程线程通讯并在保证数据安全可靠的主流实现方案时消息队列。使用消息队列在线程线程通讯时实现了数据共享,并保证数据安全可靠。

消息队列(Message Queue,简称MQ)是一种应用程序间的通信方法,最主要的功能就是实现数据共享。

简单来说:消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。

消息队列是分布式系统中的一个重要组件,它允许不同的应用程序之间通过消息的形式进行异步通信。这种通信机制可以提高系统的性能和可伸缩性,同时降低系统各部分之间的耦合度。消息队列的主要优点包括:

  • 异步处理:消息队列允许系统的不同部分独立工作,不需要即时响应对方,这样可以提高系统的响应速度和处理能力。
  • 削峰填谷:在高流量场景下,消息队列可以作为缓冲,帮助系统应对短时间内的大量请求,防止系统过载。
  • 解耦应用:通过消息队列,应用之间不必直接通信,这有助于降低系统各部分之间的依赖性,使得系统更加灵活和稳定。
  • 顺序保证:消息队列通常保证消息的传输顺序,确保数据一致性和处理的准确性。
  • 可靠性:消息队列提供了消息存储机制,即使在消费者未准备好接收消息时,也能保证消息不会丢失。

此外,在使用消息队列时,可能会涉及到一些潜在的问题,如消息的顺序性、重复消费、消息丢失、系统复杂度增加等。因此,选择合适的消息队列技术并正确配置使用是非常重要的。常见的消息队列技术有RabbitMQ、Kafka、ActiveMQ、RocketMQ等,它们各自有不同的特点和适用场景。

总的来说,消息队列是现代软件架构中不可或缺的一部分,它在提高系统性能、保证数据一致性和系统解耦方面发挥着重要作用。

消息队列功能

消息队列主要用于在分布式系统中存储转发消息,一般有异步处理,应用解耦,流量削峰和消息通讯四个场景。

  1. 异步处理

异步处理,就是将一些非核心的业务流程以异步并行的方式执行,从而减少请求响应时间,提高系统吞吐量。

在这里插入图片描述
下单为例,用户下单后需要生成订单、赠送活动积分、赠送红包、发送下单成功通知等一系列业务处理。假设三个业务节点每个使用100毫秒钟,不考虑网络等其他开销,则串行方式的时间是400毫秒,并行的时间只需要200毫秒。这样就大大提高了系统的吞吐量。

  1. 应用解耦

应用解耦,顾名思义就是解除应用系统之间的耦合依赖。通过消息队列,使得每个应用系统不必受其他系统影响,可以更独立自主。
以电商系统为例,用户下单后,订单系统需要通知积分系统。一般的做法是:订单系统直接调用积分系统的接口。这就使得应用系统间的耦合特别紧密。如果积分系统无法访问,则积分处理失败,从而导致订单失败。

在这里插入图片描述
加入消息队列之后,用户下单后,订单系统完成下单业务后,将消息写入消息队列,返回用户订单下单成功。积分系统通过订阅下单消息的方式获取下单通知消息,从而进行积分操作。实现订单系统与库存系统的应用解耦。如果,在下单时积分系统系统异常,也不影响用户正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作。

  1. 流量削峰

流量削峰也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。
以秒杀活动为例,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列,秒杀业务处理系统根据消息队列中的请求信息,再做后续处理。

在这里插入图片描述
如上图所示,服务器接收到用户的请求后,首先写入消息队列,秒杀业务处理系统根据消息队列中的请求信息,做后续业务处理。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。

  1. 消息通讯

消息通讯是指应用间的数据通信。消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等点对点通讯。

在这里插入图片描述

部分参考:秒懂消息队列MQ,万字总结带你全面了解消息队列MQ

消息队列框架

在这里插入图片描述

消息队列学习网站导航

RocketMQ-中文

在这里插入图片描述

RabbitMQ Tutorials-English

在这里插入图片描述

Apache kafka中文手册

在这里插入图片描述

redis实现的消息队列

在这里插入图片描述

消息队列FreeRTOS

在这里插入图片描述

消息队列的概念

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

php使用Canal监听msyql

canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…

代码随想录算法训练营DAY50|C++动态规划Part11|300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

文章目录 300.最长递增子序列思路CPP代码 674.最长连续递增序列思路CPP代码 718.最长重复子数组思路CPP代码 300.最长递增子序列 力扣题目链接 文章讲解:300.最长递增子序列 视频链接:动态规划之子序列问题,元素不连续!| LeetCode…

蓝牙连接手机播放音乐的同时传输少量数据,那些蓝牙芯片可以实现呢

简介 蓝牙连接手机播放音乐的同时连接另一蓝牙芯片传输少量数据,那些蓝牙芯片可以实现呢? 这个需求,其实就是双模的需求 简单描述就是:播放音乐的同时,还可以连接ble,进行数据的传输。二者同时进行,互不…

JavaScript中的Math对象方法、Date对象方法

个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 🌟Math对象方法🍄1 Math静态属性🍄2 Math…

精简函数栈帧:优化创建和销毁过程的完全解析(建议收藏,提升内功)

🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 【前文】一、函数栈帧的概念(stack frame&#xff…

VS(Visual Studio)中查找项目里的中文字符

目录 正则表达式查找中文字符 正则表达式查找中文字符 在Visual Studio (VS) 中查找所有的中文字符,你可以使用其强大的查找和替换功能。不过,由于中文字符的范围非常广泛(包括简体中文、繁体中文、日本汉字、韩国汉字等)&#xf…

【Docker第一课】docker的基本命令和试启动容器(详细图解)

目录 知识梗概 docker的初步了解 了解docker常用命令 试开启容器(这里演示nginx、python3和mysql) 1、nginx容器的启动 2、python3容器的启动 docker的作用 虚拟机与容器的区别 写在前面: 本专栏你将了解docker一些入门知识&#xff…

拼多多新店和老店哪个好做

拼多多新店和老店哪个好做 拼多多推广可以使用3an推客。3an推客(CPS模式)给商家提供的营销工具,由商家自主设置佣金比例,激励推广者去帮助商家推广商品链接,按最终有效交易金额支付佣金,不成交不扣费。是商…

【书生·浦语大模型实战营第二期】Lagent AgentLego 智能体应用搭建——学习笔记6

文章目录 概述Lagent: 轻量级智能体框架Lagent Web Demo用Lagent自定义工具 AgentLego:组装智能体“乐高”直接使用AgentLego作为智能体工具使用AgentLego用AgentLego自定义工具 参考资料 概述 Lagent是什么 一个轻量级开源智能体框架,提供了一些典型工…

计算机毕业设计python在线交友系统django+vue

Flask 是一个轻量级的 Web 框架,使用 Python 语言编写,较其他同类型框架更为灵活、轻便且容易上手,小型团队在短时间内就可以完成功能丰富的中小型网站或 Web 服务的实现。 本在线交友系统管理员功能有个人中心,用户管理&#xff…

面试经典150题——Z 字形变换

面试经典150题 day22 题目来源我的题解方法一 使用StringBuilder数组模拟矩阵方法二 找规律直接构造 题目来源 力扣每日一题;题序:6 我的题解 方法一 使用StringBuilder数组模拟矩阵 如果numRows是1,则直接返回s。 否则,创建nu…

【数据结构】算法的效率(时间复杂度和空间复杂度)

目录 一.算法的效率 二.时间复杂度 1.概念 2.大O的渐进表示法 3.常见时间复杂度计算举例 三.空间复杂度 四.常见复杂度对比 五. 复杂度的oj练习 1.消失的数字 2.轮转数字: 一.算法的效率 算法在编写成可执行程序后,运行时需要耗费时间资源和空…

区块链 | IPFS:Merkle DAG(进阶版)

🦊原文:Merkle DAGs: Structuring Data for the Distributed Web 🦊写在前面:本文属于搬运博客,自己留存学习。 1 Merkle DAG 当我们在计算机上表示图时,必须通过提供节点和边的具体表示来编码我们的数据…

黑马点评项目个人笔记+项目优化调整

博客须知 本篇博客内容来源与黑马点评项目实战篇-16.用户签到-实现签到功能_哔哩哔哩_bilibili,作者对视频内容进行了整合,由于记笔记时图片使用的是本地路径,所以导致博客的图片无法正常显示,如果有图片需求可以下载上方的pdf须…

给thinkpadP15V加装固态硬盘的TIPS

O(∩_∩)O首先要先恭喜小编,终于舍得给咱们的小伙伴加固态硬盘了 1、确定固态硬盘的类型: M.2接口NVMe协议, Pcie通道( Peripheral company interconnect express)(3.0第三代1gb每秒,4.0第四代2 gb每秒)x4…

PDF中伪代码、原理示意图等导出为矢量图

需求:将 LaTeX 中生成的伪代码 PDF 转换成 svg 或 emf 格式的矢量图,然后插入 word 或 ppt 中。 1 伪代码PDF导出为矢量图 1.1 通过 Adobe Illustrator 处理将 先新建一个空白的PDF,然后文件-->置入导入PDF; 2.选中这个图片…

k8s部署maven项目

failed to verify certificate: x509: certificate signed by unknown authority 今天在执行kubectl get nodes的时候报的证书验证问题,看了一圈首次搭建k8s的都是高频出现的问题。 couldn’t get current server API group list: Get “https://kubernetes.docker…

SwiftUI 5.0(iOS 17.0,macOS 14.0+)新 Inspector 辅助视图之趣味漫谈

概览 在 SwiftUI 开发中,苹果为我们提供了多种辅助视图用来显示额外信息从而极大丰富了应用的表现力,比如:Alert、Sheet、ContextMenu 等等。 从 SwiftUI 5.0(iOS 17+)开始, 又增加了一种全新的辅助视图:Inspector。 在本篇博文中,您将学到如下内容: 概览1. Inspe…

[笔试训练](十一)

目录 031:游游的水果大礼包 032:买卖股票的最好时机(二) 033:倒置字符串 031:游游的水果大礼包 游游的水果大礼包 (nowcoder.com) 题目: 题解: 枚举:依次枚举1号礼…