image.png本文英文原文来自RocketMQ官方核心概念文档
根据上面的模型,我们能够深入消息系统设计中的某些主题:
- 并行消费
- 消费热点问题
- 消费负载均衡
- 消息路由
- 多重连接
- 金丝雀部署(灰度,A/B)
生产者
生产者将业务系统生成的消息发送至代理服务。RocketMQ提供了多种模式来发送:异步(asynchronous),同步(synchronous)和单向(one-way)。
生产者群组
相同角色的生产者会被分为一组。同一生产者组的不同生产者实例会被代理服务联系起来,用于提交或者回滚事务,防止原始生产者在事务之后崩溃。
警告:考虑到生产者在发送消息时是有十分重要的,每个生产者群组中只能够有一个实例启用,防止没有必要的生产者实例初始化。
消费者
消费者从代理服务中拉取消息,投递给应用程序消耗。在用户应用程序使用中,提供有两种消费方式:
拉取消费
拉取消费者从代理服务中拉取消息。一旦拉取完批量消息,应用程序就会启动消费进程。
推送消费
推送消费者,综合了消息拉取,消费进程,并在其中维护其他工序,对终端用户开放回调接口,并且在消息到达时被调用。
消费者群组
类似之前提到的生产者群组,相同角色的消费者也会被分组起来称为消费者群组。
消费者群组是一个很好的方式来达到负载均衡,故障恢复,使得我们能够更简单的进行消息消费。
警告:消费群组中的消费实例必须订阅完全相同的主题。
主题
主题是用于提供生产者投递消息和消费者拉取消息。主题和生产者消费者之间的关系是非常自由的。一个主题可以有零个,一个或者多个生产者发送消息;反过来,一个生产者也可以给不同的主题发送消息。从消费者的角度,一个主题能够被零个,一个或者多个消费者群组订阅。在一个消费者群组中,也可以订阅一个或多个主题,但是要保证群组内的实例的订阅是一致的。
消息
消息就是投递的信息。消息必须对应到主题,可以理解为当你写信时的收件人地址。消息也能够包含一个可选的标签(tag)或者额外的键值对信息。例如,你可以给消息额外设置一个业务主键,开发过程中就可以在代理服务去查找消息从而诊断问题。
消息队列
主题会分段成一个或多个子主题,“消息队列”。
标签
标签也可以称为子主题,提供给用户额外的扩展性。从同一业务模块发出的不同目的的消息可以使用相同的主题和不同的标签。标签能够使你的代码保持清晰,还能够使得RocketMQ提供的查询系统更加有效。
代理服务
代理服务是RocketMQ的主要组件。它会接收生产者发送的消息,存储并且处理消费者的拉取请求。它也存储了消息相关的元数据信息,包括消费者群组,消费矜持偏移,以及主题/队列信息。
命名服务
命名服务提供了信息的路由转发能力。生产者和消费者客户端可以查找主题,并且找到对应的代理服务列表。
消息模型
- 集群
- 广播
消息顺序
当你使用 DefaultMQPushConsumer 时,你可以决定使用顺序或者并行来消费消息。
- 顺序
顺序消费意味着消息会以生产者发送到每个消息队列的顺序来进行消费。如果你的场景要求全局顺序严格控制,那主题中只能只用一个消息队列。
警告:如果消费顺序是特定的,最大的消息消费并行数量就是消费者群组订阅的消息队列的数量。 - 并行
当并行消费消息时,消息消费的并行数量只会受到消费客户端的线程池的大小限制。
警告:在并行模式中,无法保证消息顺序。
网友评论