Rocketmq消息队列 消息模型 详解

消息队列模型

两种消息模型

队列模型

队列模型是最开始的一种消息队列模型,对应着消息队列“发-存-收”的模型。生产者往某个队列里面发送消息,一个队列可以存储多个生产者的消息,一个队列也可以有多个消费者,但是消费者之间是竞争关系,也就是说每条消息只能被一个消费者消费

在这里插入图片描述

发布/订阅模型

在发布-订阅模型中,消息的发送方称为发布者(Publisher),消息的接收方称为订阅者(Subscriber),服务端存放消息的容器称为主题(Topic)。发布者将消息发送到主题中,订阅者在接收消息之前需要先“订阅主题”。“订阅”在这里既是一个动作,同时还可以认为是主题在消费时的一个逻辑副本,每份订阅中,订阅者都可以接收到主题的所有消息。

RocketMQ 的消息模型

RocketMQ 使用的消息模型是标准的发布-订阅模型

RocketMQ 本身的消息是由下面几部分组成:

NameServer:

生产者,消费者,Broker都会在NameServer进行注册,并向NameServer发送心跳包,NameServer可搭建集群,但是节点之间不进行互相通讯,每个Broker与NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer。

Broker:

消息存储与转发服务器,负责实际的消息读写、持久化、高可用同步。

接收消息,消息持久化,提供消息

Producer:

生产者,生产消息,向NameServer询问Broker地址,然后往Broker发送消息。Producer 与 NameServer 集群中的其中一个节点(如果这个节点挂了,就向其它节点建立连接,配置文件可以指定多个NameServer信息)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态。

Consumer:

Consumer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave发送心跳。Consumer 既可以从 Master 订阅消息,也可以从Slave订阅消息。

Message:

消息本身

Topic:

消息主题,用于隔离数据,需要集群内唯一,Topic是逻辑概念,物理上对应多个Queue

Queue:

消息队列,属于某个topic,例如某个topic有三条queue,生产者投递消息时会负载均衡(默认轮询)给这三个queue,也就是说queue是topic实际存储消息的地方,queue支持动态扩展,queue是为了加快topic的消费速度

Tag:

消息的某个属性,对Topic的进一步细分,例如订单topic可以分成创建订单tag、取消订单tag、支付订单tag

Offset:

Offset分为消息点位和消费点位

  • 消息点位就是消息在queue中的偏移量,每个队列有自己的最小消息点位和最大消息点位,内存不够时就回滚最小的消息。
  • 消费点位消费者首次订阅时可以指定从哪个offset开始消费。
    • 集群模式下同一消费者组的消费者的offset应该是一样的offset,由broker以消费者组级别为粒度进行管理,消费者也可以在消费完消息后手动提交offse
    • 广播模式下每个消费者本地自己维护offset

生产消息类型:

同步发送:需要等待MQ的响应结果

异步发送:设置成功和失败的回调函数即可

单向发送:直接发送,不管是否成功

消费消息类型:

集群消费:每条消息只会被订阅了这个topic的每个消费者组中的某一个消费者消费,如有消费者组A和组B和组C,则从组A、组B、组C中分别挑一个消费者出来消费。如果消费失败,不保证每一次重投到同一台机器上

广播消费:每条消息会被订阅了这个topic的每个消费者组中的所有消费者消费,如有消费者组A和组B和组C,则组A、组B、组C中所有的消费者都要消费这条消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值