携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
要是有哪里不明白的,可以对照上一篇文章一起食用,效果更好呦。
1 NameServer
接上回我们讲到,为什么码头建了个小房子,今后我们称之为候船大厅。这码头上还有很多的小姐姐服务员,这里的服务员就是候船大厅的大脑,她们会记录哪些家长送来的孩子,要去哪里,有哪些船夫在等待送这些孩子。送孩子的家长们来了也是找她们登记,船夫来了,也找他们登记。
NameServer是RocketMQ服务的注册和发现中心 要启动RocketMQ的话,首先要启动NameServer
2 Broker
这Brker就是这个候船大厅,它会告诉服务员,自己的那些座位开放了可以坐,哪些人了可以进来坐到哪里等候船夫。这候船大厅内部有好几个区,每个区内又有一排排的座位。这个区我们称之为Topic,而座位就是对应的message queue
Broker会将自己的队列或者topic注册到NameServer。Broker主要负责消息的存储。
3 Producer 生产者
生产者也就是来送孩子的家长,为了将孩子确切的送到码头,这些家长也会有自己的保证机制,这个我们之后详细讲。
生产者:消息的来源
4 Consumer 消费者
也就是我们故事中的船夫,船夫会从Broker候船大厅拉走对应的孩子,将他们送到想去的地方。他们送到之后,回来会把送到的消息发送给Broker。
消费者:消息的订阅者
5 主题 Topic
这时候我们把目光放到候船大厅内部,有好几层,也有一个个区域,消息孩子进来之后,指明自己需要一个叫什么的topic区域,工作人员就会创建一个这样的区域。这个区域里就是去同一个地方的同一类人。家长们把孩子们送来之后,可以送到同一个区域,也可以送到各自不同的区域。
主题标识一类消息,Broker中可以创建很多个消息,为了标识一类消息,就需要用topic来标识。再进行生产或者消费的时候,一般来说都需要指定一个主题topic。一个生产个者可以发送消息到一个或者多个topic,消费者也可以订阅一个或者多个topic。
6 分组 Group
分组就稍稍有点抽象了,大致可以认为是,有的孩子是去学习的,有的孩子是去做生意的。对于生产者家长来说,区别不大,但是对于消费者船夫来说,他们就有的只拉去学习的,有的只拉去做生意的。
生产者若是进行分组的话,主要标识同一类消息,发送逻辑一致。一般作为普通消息的时候没有特别之处。生产者里边的分组主要用于事务消息。
可是分组对于消费者就特别有意义了,消费者主要是对某一类消息的消费,并且消费逻辑是一致的。
7 消息队列 Message Queue
这个就很明显了,这就是每个区域内的座位呗,来乘船的人到指定的区域的指定位置坐好,等候上船,一般每个区域有多排座位,但也有人少的时候是一排的。每个船夫则单独负责一排座位上的人。来一个拉一个,来一个拉一个。
一般来说,一个主题至少有一个队列,也可以是多个。若是一个topic下有多个message queue,则会采用轮询的方式进行消息存储,然而若是消费者是集群模式,则每个节点会取某一个message queue的数据,这样可以一定程度上提升消费的并发度。
8 Tag 标签
标签是指有的乘船的孩子有一些特殊的地方,比如有几个孩子背着画板,那么就有一个游船找他们,找到后拉上船去游玩啦。
可以通过给消息设置tag属性增加消息的辨识度,当消费者只需要某一类消息的时候,就可以通过tag辨别。
8 偏移量 Offset
这个偏移量主要是船夫表示自己拉到第几个座位的孩子了
一般不特意指定的时候,指的是消费者消费的偏移量。代表了消费者已经消费了多少消息。