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

相关文章

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;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By