RocketMQ 的先容及核心概念讲解
RocketMQ 是什么?RocketMQ 是一个低延时、高可靠、可伸缩、易于使用的分布式消息中间件,是由阿⾥巴巴开源的消息中间件(使用 Java 语言编写的),2016年11月,阿里巴巴向 Apache 软件基金会捐赠了 RlocketMQ,2017年9月,Apache 公布 RocketMQ 孵化成为 Apache 顶级项目(TLP)成为国内首个互联网中间件在 Apache 上的顶级项目,RocketMQ 具有高吞吐、低耽误、海量消息堆积等优点,同时提供顺序消息、事务消息、定时消息、消息重试等功能,非常适合在电商、金融等范畴使用。
什么是消息队列?
消息队列是一种用于在分布式体系中进行通信的技术,它是一种存储和转发消息的中间件,可以用于将应用步伐之间的通信解耦,从而实现高效的异步通信,消息队列允许发送者将消息发送到队列中,而接收者则可以从队列中获取消息并进行处理,这种方式可以资助体系实现高可用性、高性能、松耦合和可伸缩性,消息队列通常包罗生产者(发送消息的应用步伐)、消费者(接收消息的应用步伐)和队列(存储消息的缓冲区),常见的消息队列有 Kafka、RocketMQ、RabbitMQ、Redis 等。
消息队列的使用场景
消息队列在项目中的使用场景主要用于,异步、削峰、解耦。
[*]异步:异步处理,异步调用,好比用户注册成功后发送注册成功的短信,就可以使用 MQ 异步来发送。
[*]削峰:用于高并发哀求场景,消除高并发场景的峰值流量,让哀求在 MQ 中排队执行。
[*]解耦:服务解耦,服务与服务之间的 RPC 调用是同步的,调用方必须等候服务提供方响应结果后才能继承执行业务,使用 MQ 后服务间的通讯是异步的,服务之间没有直接调用关系,让服务解耦了。
RocketMQ 的核心概念?
[*]Producer:消息生产者,一般是业务体系来负担这个角色,生产者会把业务体系产生的消息发送到 Broker 服务器。
[*]Broker:消息中转服务器,负责存储和准发消息,RockerMQ 支持多个 Broker 构建成集群,每个 Broker 都有独立的存储空间和消息队列。
[*]Consumer:消息消费者,负责从 Broker 中拉取消息消费,从用户的角度 RockerMQ 提供了两种消费模式,分别是推动消费和拉取消费。
[*]NameServer:担任路由消息的提供者,负责维护 Broker 元数据信息,包罗 Broker 地址、Topic、队列 Queue,Producer 和 Consumer 在启动时候需要毗连到 NameServer 获取元数据信息,NameServer 以 HashMap 的方式来存储元数据信息。
[*]Topic:消息主题,是消息的逻辑区分单位,Producer 将消息发送给 Topic,Consumer 从指定的 Topic 中消费消息,一个 Producer 可以发送消息给一个或者多个 Topic,一个 Cousumer 可以消费一个或者多个 Topic。
[*]Message Queue:消息队列,真正存储消息的地方,可以明白为 Topic 的分区,一个 Topic 可以有多个 Queue,每个 Queue 都是独立的存储单元,Producer 发送的消息会被存储到对应的 Queue 中,Consumer 从指定的 Queue 中消费消息,Message Queue 有点雷同 Kafka 中的 Partition。
RocketMQ 组成简图
了解了 RocketMQ 核心概念后,我们来输出一个 RicketMQ 的组成简图,如下:
https://i-blog.csdnimg.cn/direct/09a19fad451b434da490beed545515b0.png
RocketMQ 的使用场景
[*]削峰填谷:例如电商常用的秒杀场景,瞬时流量较大,大概导致体系瓦解,使用 RocketMQ 可以将这些瞬时流量进行平滑处理,提升体系的稳定性。
[*]异步解耦:多个体系间的交互如果使用 HTTP 调用会是强耦合的关系,部分业务使用 RocketMQ 解耦,可以降低体系的耦合度,也可以对核心业务起到一定的掩护作用。
[*]顺序执行:业务中有较多的顺序执行的场景,例如订单的创建、付出、发货等流程,RocketMQ 提供了顺序消息,来保证这些业务的顺序执行。
[*]分布式事务场景:对于一些跨库事务,数据一致性及及时性要就没有非常高的时候,可以使用 RocketMQ 实现分布式事务,这样即可以保证数据的一致性,又可以实现体系间的解耦。
RocketMQ 的工作流程
[*]启动 NameServer,它会等候 Broker 来注册,等候 Producer、Cousumer 获取元数据信息。
[*]启动 Broker,Broker 会自动和 NameServer 建立毗连,并发送心跳包到 NameServer,心跳包中包含当前 Broker 的 IP 、Port、Topic 以及 Topic 和 Broker 之间的关系。
[*]启动 Producer,Producer 会随机的和 NameServer 集群中的一台建立长毗连,并从 NameServer 中获取当前发送的 Topic 的所有 Broker 地址,然后从 Topic 的队列列表中随机选择一个队列,与队列所在的 Broker 建立长毗连完成消息发送。
[*]Broker 接受到 Producer 发送的消息后,如果设置的是同步复制(还有异步复制模式),Broker Master 会先将消息复制 Broker Slave 节点,然后才给 Producer 返回消息写入成功,如果设置的是同步刷盘模式,则还需要将消息写入磁盘后,才给 Producer 返回消息写入成功,如果配置的是异步同步或者异步刷盘,则 Broker Master 接受到消息后就会给 Broker 返回消息写入成功。
[*]启动 Consumer,Consumer 会随机的和 NameServer 集群中的一台建立长毗连,并获取订阅信息,然后根据订阅信息和对应的 Broker 建立长毗连,获取消息完成消费。
总结:本篇简朴分享了 RocketMQ 的一些概念和使用场景,初步对 RocketMQ 有了一个简朴的认识,盼望可以资助到大家。
如有禁绝确的地方欢迎各位指出纠正。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]