RabbitMQ原理

简介: 描述了RabbitMQ的原理和使用方法

1.异步调用:

我们以购买商品为例,用户支付后需要调用订单服务完成订单状态修改,调用物流服务,从仓库分配响应的库存并准备发货。

在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。

订单服务和物流服务是事件订阅者(Consumer),订阅支付成功的事件,监听到事件后完成自己业务即可。

为了解除事件发布者与订阅者之间的耦合,两者并不是直接通信,而是有一个中间人(Broker)。发布者发布事件到Broker,不关心谁来订阅事件。订阅者从Broker订阅事件,不关心谁发来的消息。

image.png

Broker 是一个像数据总线一样的东西,所有的服务要接收数据和发送数据都发到这个总线上,这个总线就像协议一样,让服务间的通讯变得标准和可控。

好处:

  • 吞吐量提升:无需等待订阅者处理完成,响应更快速
  • 故障隔离:服务没有直接调用,不存在级联失败问题
  • 调用间没有阻塞,不会造成无效的资源占用
  • 耦合度极低,每个服务都可以灵活插拔,可替换
  • 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件

缺点:

  • 架构复杂了,业务没有明显的流程线,不好管理
  • 需要依赖于Broker的可靠、安全、性能

好在现在开源软件或云平台上 Broker 的软件是非常成熟的,比较常见的一种就是我们今天要学习的MQ技术。

2.基本结构

RabbitMQ中的一些角色:

  • publisher:生产者
  • consumer:消费者
  • exchange个:交换机,负责消息路由
  • queue:队列,存储消息
  • virtualHost:虚拟主机,隔离不同租户的exchange、queue、消息的隔离

image.png

3.RabbitMQ消息模型

RabbitMQ官方提供了5个不同的Demo示例,对应了不同的消息模型:

image.png



4.RabbitMQ原理简介

RabbitMQ是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP),作为消息传递的中间件。它允许应用程序和服务之间通过消息进行通信,帮助构建弹性、可扩展和可靠的系统架构。

RabbitMQ基于生产者-消费者模型,消息发送方称为生产者,消息接收方称为消费者。生产者将消息发送到RabbitMQ的消息队列中,而消费者可以从队列中获取并处理这些消息。

使用RabbitMQ可以提供以下好处:

  1. 异步通信:通过消息队列,应用程序可以异步地发送和接收消息,降低系统间的耦合度,提高系统的可靠性和性能。
  2. 解耦系统组件:消息队列充当中间件,减少了系统组件间的直接依赖,使系统更加灵活和可扩展。
  3. 削峰填谷:通过消息队列,可以将请求进行缓冲,平衡系统负载,避免系统过载或请求丢失。
  4. 可靠性:RabbitMQ提供持久化消息、可靠的消息传递机制和消息确认机制,确保消息不会丢失。
  5. 多语言支持:RabbitMQ支持多种编程语言和平台,可以方便地与不同技术栈的应用程序进行集成。

总之,RabbitMQ是一个功能强大的消息代理软件,可以用于构建可靠、可扩展的分布式系统,并解决异步通信和系统之间解耦的问题。

image.png

5.使用RabbitMQ步骤

要使用RabbitMQ,需要进行以下步骤:

  1. 安装RabbitMQ:首先,你需要下载并安装RabbitMQ服务器。你可以从RabbitMQ官方网站(https://www.rabbitmq.com/)下载适合你操作系统的安装程序,并按照指示进行安装。
  2. 启动RabbitMQ服务器:安装完成后,你可以启动RabbitMQ服务器。在大多数操作系统中,你可以使用命令行或者图形界面启动。确保服务器成功启动并监听指定的端口。
  3. 连接到RabbitMQ:你的应用程序需要连接到RabbitMQ服务器才能发送和接收消息。在连接之前,你需要选择一个RabbitMQ客户端库,并将其添加到你的应用程序中。RabbitMQ提供了多种语言的客户端库,如Java、Python、JavaScript等。你可以根据你的应用程序语言选择适合的客户端库。
  4. 创建队列:在发送和接收消息之前,你需要创建一个消息队列。消息队列是RabbitMQ中的存储单位,用于在生产者和消费者之间传递消息。你可以使用RabbitMQ的管理界面或客户端库提供的API来创建队列。
  5. 发布消息:生产者通过将消息发送到队列中来发布消息。你可以使用客户端库提供的API发送消息,并指定要发送到的队列。
  6. 消费消息:消费者从队列中获取消息并进行处理。你可以使用客户端库提供的API来监听队列,并在有新消息时触发回调函数进行处理。

以上是一个简单的使用RabbitMQ的流程。当然,RabbitMQ还有更多的高级特性,如交换机、绑定、路由等。你可以根据你的应用需求进一步学习和深入了解这些概念。

请注意,RabbitMQ的使用涉及到一些复杂的概念和配置。如果你是第一次接触,可能需要花些时间学习和理解这些概念。官方文档和示例代码将对你有很大的帮助。


相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
11月前
|
消息中间件 存储 缓存
RocketMQ工作原理详解及开发实例
RocketMQ工作原理详解及开发实例
528 0
|
3天前
|
消息中间件 存储 安全
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
34 0
|
8月前
|
消息中间件 存储 网络协议
从原理到实战,手把手教你在项目中使用RabbitMQ
RabbitMQ 的文章之前写过,但是当时给的示例是 Demo 版的,这篇文章主要是结合之前写的理论知识,将 RabbitMQ 集成到技术派项目中。 话不多说,上文章目录: 下面我们先回顾一下理论知识,如果对这块知识已经清楚的同学,可以直接跳到实战部分。 1. 消息队列 1.1 消息队列模式 消息队列目前主要 2 种模式,分别为“点对点模式”和“发布/订阅模式”。 点对点模式 一个具体的消息只能由一个消费者消费,多个生产者可以向同一个消息队列发送消息,但是一个消息在被一个消息者处理的时候,这个消息在队列上会被锁住或者被移除并且其他消费者无法处理该消息。 需要额外注意的是,如果消费者
457 5
|
3天前
|
消息中间件 存储 Kafka
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
58 1
|
3天前
|
消息中间件 存储 负载均衡
精华推荐 | 【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿RocketMQ的消费者端的运行核心的流程(上篇)
精华推荐 | 【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿RocketMQ的消费者端的运行核心的流程(上篇)
24 1
|
6月前
|
消息中间件 Kafka 测试技术
微服务轮子项目(33) -RocketMQ特点、安装部署、异常处理、事务消息原理
微服务轮子项目(33) -RocketMQ特点、安装部署、异常处理、事务消息原理
98 0
|
3天前
|
消息中间件 存储 Cloud Native
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
|
3天前
|
消息中间件 存储 缓存
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
|
3天前
|
消息中间件 存储 Apache
精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。
396 2
精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
|
7月前
|
消息中间件 存储 监控
消息中间件第八讲:消息队列 RocketMQ 版实战、集群及原理
消息中间件第八讲:消息队列 RocketMQ 版实战、集群及原理
113 0