RabbitMQ入门教学(浅入浅出)

2024-05-03 12:28

本文主要是介绍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

在这里插入图片描述

消息队列的概念

在这里插入图片描述

这篇关于RabbitMQ入门教学(浅入浅出)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956741

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

SpringBoot整合Canal+RabbitMQ监听数据变更详解

《SpringBoot整合Canal+RabbitMQ监听数据变更详解》在现代分布式系统中,实时获取数据库的变更信息是一个常见的需求,本文将介绍SpringBoot如何通过整合Canal和Rabbit... 目录需求步骤环境搭建整合SpringBoot与Canal实现客户端Canal整合RabbitMQSp

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题: