系列二、RocketMQ简介

本文介绍了RocketMQ,阿里巴巴的开源消息中间件,其特点包括严格的消息顺序、多模式拉取、高效扩展和异步处理。主要讨论了其架构、组件如Producer、Consumer、Broker和NameServer的作用,以及消息发送和接收的过程。
摘要由CSDN通过智能技术生成

一、RocketMQ简介

1.1、概述

        RocketMQ是阿里巴巴旗下一款开源的消息中间件,2016年11月28日,阿里巴巴向Apache软件基金会捐赠RocketMQ,成为Apache孵化项目,2017年9月25日,Apache宣布RocketMQ孵化成为Apache顶级项目(TLP),成为国内首个互联网中间件在Apache上的顶级项目。

官网:https://rocketmq.apache.org/

1.2、发展历程

1.3、特点

(1)能够保证严格的消息顺序;
(2)提供丰富的消息拉取模式;
(3)高效的订阅者水平扩展能力;
(4)实时的消息订阅机制;
(5)亿万级消息堆积能力;

1.4、异步处理消息

        消息发送者可以发送一个消息而无需等待消费者的响应。发送者把消息发送到一条虚拟的通道(主题或队列)上,消息接收者则订阅或监听该通道。一条消息可能最终转发给一个或者多个消费者,这些接收者都无需对消息发送者做出回应,整个过程都是异步的。

        案例:系统A和系统B通信。系统A希望发送一条消息给系统B,让它去处理,但是系统A并不关注系统B到底怎么处理或者有没有处理好,也就是说系统A把消息发送给MQ后,就不管这条消息的"死活"了,接着系统B从MQ里面消费消息即可。至于怎么处理,是否处理完毕,什么时候处理完毕,都是系统B的事情了,与系统A无关。这样的一种通信方式就是所谓的"异步"通信方式,对于系统A来说,只要把消息发送给MQ,然后系统B就会去异步处理了,系统A不会"同步"的等待系统B的响应。这样的好处是什么呢?解耦!大概的流程可能如下:

再举一个生活中的例子:对讲机、网上商城购物下订单等

1.5、基本概念

1.5.1、消息(Message)

        消息是指,消息系统所传输信息的物理载体,是生产和消费数据的最小单位,每条消息必须属于某一个主题。

1.5.2、主题(Topic)

        Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只属于某一个主题,是RocketMQ进行消息订阅的基本单位。topic:message 1:n、message:topic 1:1。一个生产者可以同时发送多种Topic的消息,producer:topic 1:n 、consumer:topic 1:1

1.5.3、标签(Tag)

        为消息设置的标签,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同的标签。标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消费者可以根据Tag实现不同子主题的不同消费逻辑,实现更好的扩展性。

Topic = 货物 Tag = 上海
Topic = 货物 Tag = 上海|浙江
Topic = 货物 Tag = *

1.5.4、队列(Queue)

        存储消息的物理实体。一个Topic中可以包含多个Queue,每个Queue中存放的就是该Topic的消息。一个Topic中的Queue也被称为一个Topic中的消息分区(Partition)。

1.5、重要组件

(一)Producer

        消息的生产者,发送者,可以类比为寄信人。

(二)Consumer

        消息的消费者,接收者,可以类别为收信人。

(三)Broker

        暂存和传输消息的通道,可以类比为快递公司。

(四)Queue

        队列,消息存放的位置,一个Broker中可以有多个队列,可以类别为快递公司的各个货架。

(五)Topic

        主题,可以类比为消息的种类。

(六)ProducerGroup

        生产者组。

(七)ConsumerGroup

        消费者组,多个消费者组可以同时消费一个主题的消息。

(八)NameServer

        (1)NameServer是一个几乎无状态的节点,可以集群部署,节点之间无任何信息同步;

        (2)NameServer 是整个 RocketMQ 的“大脑” ,它是 RocketMQ 的服务注册中心,所以 RocketMQ 需要先启动 NameServer,再启动Broker(先有公司,再有部门)

1.6、发送 & 接收消息

        Producer询问NameServer,NameServer分配一个Broker给Producer,接着Producer就可以往Broker中发送消息了,然后Consumer消费消息之前也要询问NameServer,得到一个具体的Broker,然后消费消息,大致流程图如下:

1.7、生产者和消费者

回答: RocketMQ是一款消息中间件,它包含了发送端(producer)、消息存储端(broker)和消费端(consumer)。这些端之间的关联是通过一个注册中心来实现的,这个注册中心就是namesrv。namesrv的作用是收集各端的信息,并进行路由信息的处理和封装。它是独立存在运行的,并且多个namesrv之间是相互独立的。\[1\] 在RocketMQ中,路由发现是非实时的。当Topic路由发生变化时,NameServer不会主动推送给客户端,而是由客户端定时拉取最新的路由信息。客户端可以使用GET_ROUTEINFO_BY_TOPIC编码来拉取最新的路由信息。\[2\] RocketMQ的namesrv模块的核心启动方法是org.apache.rocketmq.namesrv.NamesrvStartup#start。在这个方法中,首先进行了controller的初始化,然后注册了一个系统勾子方法,用于在JVM关闭时调用controller的shutdown方法,最后调用controller的start方法来启动控制器。\[3\] #### 引用[.reference_title] - *1* *3* [rocketmq源码系列-namesrv(一)](https://blog.csdn.net/woyixinyiyi/article/details/88618024)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [RocketMQ源码系列(一) NameServer 核心源码解析](https://blog.csdn.net/qq_33036061/article/details/117930054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值