核心概念
根据上述模型,我们可以深入了解消息系统设计的一些主题:
- 消费者并发
- 消费者热点问题
- 消费者负载均衡
- 消息路由
- 连接复用
- Canary 部署
生产者
生产者将业务应用系统生成的消息发送给brokers。 RocketMQ提供了多种发送模式:同步,异步和单向。
生产者 Group
同一角色的生产者被分组在一起。 同一生产者组的不同生产者实例可以由经纪人联系以提交或回滚交易,以防原始生产者在事务之后销毁。
警告:考虑到提供的生产者在发送消息方面功能非常强大,每个生产者组只允许一个实例,以避免对生产者实例进行不必要的初始化。
消费者
消费者从brokers 处获取消息并将其提供给应用程序。 从用户应用的角度来看,提供了两种类型的消费者:
PullConsumer
拉消费者主动从brokers拉取消息。 一旦批量消息被拉,用户应用程序启动消费过程。
PushConsumer
另一方面,推消费者封装消息拉取,消耗进度和维护其他工作,留下一个回调接口给最终用户执行消息到达时执行。
消费者 Group
与前面提到的生产者组织类似,完全相同角色的消费者被组合在一起并命名为消费者组
消费者Group是一个很好的概念,在消息消费方面实现负载均衡和容错目标是非常容易的。
警告:消费者组的消费者实例必须具有完全相同的主题订阅。
主题(Topic)
主题是生产者传递消息和消费者提取消息的类别。 话题与生产者和消费者的关系非常松散。 具体而言,一个主题可能有零个,一个或多个向其发送消息的生产者; 相反,制作人可以发送不同主题的信息。 从消费者的角度来看,一个话题可能由零个,一个或多个消费者群体订阅。 同样,一个消费群体可以订阅一个或多个主题,只要这个群体的实例保持其订阅的一致性。
消息(Message)
消息是要传递的信息。 一条消息必须有一个主题,这可以被解释为你的信件的邮件地址。 一个消息也可以有一个可选的标签和额外的键值对。 例如,您可以为您的消息设置业务密钥,并在代理服务器上查找消息以在开发期间诊断问题。
消息队列(Message Queue)
主题被分成一个或多个子主题“消息队列”。
标签(Tag)
标签,换句话说,子标题,为用户提供了额外的灵活性。 使用标签,来自同一业务模块的具有不同目的的消息可能具有相同的主题和不同的标签。 标签将有助于保持您的代码清洁和连贯,标签也可以方便RocketMQ提供的查询系统。
Broker
Broker 是RocketMQ系统的主要组成部分。 它接收生产者发送的消息,存储消息并准备处理来自消费者的请求。 它还存储消息相关的元数据,包括消费者组,消耗进度偏移和主题/队列信息。
Name Server
名称服务器(Name server )充当路由信息提供者。 生产者/消费者客户端查找主题以找到相应的经纪人列表。
(消息模型)Message Model
- 集群(Clustering)
- 广播(Broadcasting)
消息顺序(Message Order)
当使用DefaultMQPushConsumer时,可以决定是否有序或同时使用消息。
- 顺序(Orderly)
消费消息有序意味着消息被消费者按照消息队列发送者的相同顺序消费。 如果您正在处理强制使用全局顺序的情况,请确保您使用的主题只有一个消息队列。
警告:如果指定消费有序,则消费消息的最大并发度是消费者组订阅的消息队列的数量。
- 并发(Concurrently)
并发使用消息时,消费消息的最大并发性仅受限于为每个客户端指定的线程池。
警告:在此模式下不再保证消息顺序。