RabbitMQ入门教学(浅入浅出)

news2025/4/4 3:15:09

进程间通信

互联网的通讯时网络的基础,一般情况下互联网的资源数据对储存在中心服务器上,一般情况下个体对个体的访问仅限于局域网下,在公网即可完成资源的访问,如各种网站资源,下载资源,种子等。网络通讯都是基于应用程序到应用程序的通讯,例如访问网页必须要借助浏览器,各种手机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

在这里插入图片描述

消息队列的概念

在这里插入图片描述

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

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

相关文章

NDK 基础(一)—— C 语言知识汇总

本系列文章主要是介绍一些 NDK 开发所需的基础知识,目录如下: NDK 基础(一)—— C 语言知识汇总 NDK 基础(二)—— C 语言基础与特性1 NDK 基础(三)—— C 语言基础与特性2 NDK 基础…

大数据之数据仓库技术:ETL工具和Kettle简介

大数据之数据仓库技术:ETL工具和Kettle简介 ETL简介ETL工具和KettleKettle家族 Kettle资源KettlePack 任务调度工具 ETL简介 ETL(Extract-Transform-Load): 在大数据技术领域内,用来描述将数据从 来源端 经过 抽取(extract), 转换(transform), 加载(loa…

[1678]旅游景点信息Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅游景点信息管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql…

【介绍下Apache的安装与目录结构】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

Spark RDD的分区与依赖关系

Spark RDD的分区与依赖关系 RDD分区 RDD,Resiliennt Distributed Datasets,弹性式分布式数据集,是由若干个分区构成的,那么这每一个分区中的数据又是如何产生的呢?这就是RDD分区策略所要解决的问题,下面我…

Luminar开始为沃尔沃生产下一代激光雷达传感器

在自动驾驶技术的浪潮中,激光雷达(LiDAR)传感器以其高精度和强大的环境感知能力,逐渐成为了该领域的技术之星。Luminar(路安达)公司作为自动驾驶技术的领军企业,近日宣布已开始为沃尔沃汽车生产…

智能家居|基于SprinBoot+vue的智能家居系统(源码+数据库+文档)

智能家居目录 基于SprinBootvue的智能家居系统 一、前言 二、系统设计 三、系统功能设计 1管理员:个人中心管理功能的详细实现 2管理员:用户信息管理功能的详细实现 3管理员:家具管理功能的详细实现 4管理员:任务管理功能…

Golang | Leetcode Golang题解之第63题不同路径II

题目&#xff1a; 题解&#xff1a; func uniquePathsWithObstacles(obstacleGrid [][]int) int {n, m : len(obstacleGrid), len(obstacleGrid[0])f : make([]int, m)if obstacleGrid[0][0] 0 {f[0] 1}for i : 0; i < n; i {for j : 0; j < m; j {if obstacleGrid[i]…

leetCode65. 有效数字

leetCode65. 有效数字 题目思路 代码 class Solution { public:bool isNumber(string s) {int l 0, r s.size() - 1;// 1.忽略前后的空格while(l < r && s[l] ) l;while(l < r && s[r] ) r--;if(l > r) return false;s s.substr(l,r - l 1)…

Docker——生产案例(如何修改Docker部署服务的端口映射)

目录 前言 1. 测试环境中新建Apache服务 2.停止容器和Docker服务 3.修改容器配置 4.重启Docker服务并访问测试 前言 由于接替原工作人员的工作之后&#xff0c;上级需要修改Docker部署Apache服务的端口映射&#xff0c;将89端口修改为99端口&#xff0c;那我们该如何修改呢…

GitHub Copilot 简单使用

因为公司安全原因&#xff0c;并不允许在工作中使用GitHub Copilot&#xff0c;所以&#xff0c;一直没怎么使用。最近因为有一些其它任务&#xff0c;所以&#xff0c;试用了一下&#xff0c;感觉还是很不错的。&#xff08;主要是C和Python编程&#xff09; 一&#xff1a;常…

不固定属性分组的减轻校准偏差以改善医学成像分析中的公平性

文章目录 Mitigating Calibration Bias Without Fixed Attribute Grouping for Improved Fairness in Medical Imaging Analysis摘要方法实验结果 Mitigating Calibration Bias Without Fixed Attribute Grouping for Improved Fairness in Medical Imaging Analysis 摘要 这…

预训练模型介绍

一、什么是GPT GPT 是由人工智能研究实验室 OpenAI 在2022年11月30日发布的全新聊天机器人模型, 一款人工智能技术驱动的自然语言处理工具 它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动,能完成撰写邮件、视频脚本、文案、翻译、代码等任务 二、 为…

分享几个嵌入式操作系统

文章目录 1. 概述2. 常见的RTOS2.1 μC/OS2.2 FreeRTOS2.3 RT-Thread2.4 其它系统1. 概述 最近在查阅一些物联网系统相关的知识,因此查到了实时操作系统(Real Time Operating System,简称RTOS)。我最早接触的RTOS是μC/OS,当时是为了学习 操作系统相关的知识,后来工作也接…

LeetCode-网络延迟时间(Dijkstra算法)

每日一题 今天刷到一道有关的图的题&#xff0c;需要求单源最短路径&#xff0c;因此使用Dijkstra算法。 题目要求 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 …

GPT-1

GPT 系列是 OpenAI 的一系列预训练模型&#xff0c;GPT 的全称是 Generative Pre-Trained Transformer&#xff0c;顾名思义&#xff0c;GPT 的目标是通过 Transformer&#xff0c;使用预训练技术得到通用的语言模型。目前已经公布论文的有 GPT-1、GPT-2、GPT-3。 最近非常火的…

java之web笔记

1.Servlet技术 1.1 JavaWeb概述 在Sun的Java Servlet规范中&#xff0c;对Java Web应用作了这样定义:“JavaWeb应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。 Java Web应用中可以包含如下内容…

B+树详解与实现

B树详解与实现 一、引言二、B树的定义三、B树的插入四、B树的删除五、B树的查找效率六、B树与B树的区别和联系 一、引言 B树是一种树数据结构&#xff0c;通常用于数据库和操作系统的文件系统中。它的特点是能够保持数据稳定有序&#xff0c;其插入与修改拥有较稳定的对数时间…

hive表基本语法

hive表基本语法 青少年是一个美好而又是一去不可再得的时期 是将来一切光明和幸福的开端 目录 hive表基本语法 1.ROW FORMAT用法 2.LOCATION用法 3.EXTERNAL用法 &#xff08;外部表&#xff09; 4.STORED AS 用法&#xff1a;设置数据存储格式 5.TBLPROPERTIES 用法 6.P…

liceo靶机复现

liceo-hackmyvm 靶机地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmLiceo 本机环境&#xff1a;NAT模式下&#xff0c;使用VirtualBox 信息收集&#xff1a; 首先局域网内探测靶机IP 发现IP为10.0.2.4 开启nmap扫描一下看看开了什么端口 扫描期间看一下web页…