二、领域模型
消息生产:生产者 消息存储:主题、队列、消息 消息消费:消费者分组、消费者、订阅关系 消息传输模型:主要有点对点模型和发布订阅模型
1.主题 Topic
消息传输和存储的顶层容器,用于表示同一业务逻辑的消息
内部属性
-
主题名称:主题名称标识主题,全局唯一,创建主题时定义
-
队列列表:是消息存储的实际容器,队列是主题的组成单元,实体自动分配数量,一个主题内至少一个队列
-
消息类型:主题所支持的消息类型,创建主题时选择消息类型,支持普通信息Nomral、顺序信息FIFO、定时/延时信息Delay、Transaction事务信息
2.队列 MessageQueue
是主题的组成部分。所有成功发送的消息都被存储在队列中。
内部属性
-
读写权限:当前队列是否可以读写数据,0、2、4、6分别代表不可读写、只写、只读、读写
-
行为约束
-
版本兼容性:5.x版本中,队列名称为一个集群分配的全局唯一的字符串组成,和物理节点解耦
3.消息 Message
消息是最小数据传输单元。
特点
消息不可变性、消息持久化
内部属性
-
主题名称:从客户端SDK获取
-
消息类型:当前消息的类型,从客户端SDK获取
-
消费点位:当前消息存储在队列中的位置,从服务端指定并填充
-
消息ID:消息的唯一标识,集群内唯一,有客户端自动生成,固定为大写字母和数字组成的32位字符串
-
索引key列表(可选):消息的索引键,可通过设置不同的key来区分消息和快速查找,生产者客户端定义
-
过滤标签Tag(可选):消息的过滤标签,消费者可通Tag来过滤消息吗,仅接收指定标签的消息,由生产者客户端定义,一条信息仅支持设置一个标签
-
定时时间(可选):延时触发,由消费生产者自定义,最大40天
-
消息发送时间:消息发送时间,ms级时间戳,生产者客户端自动填充,以客户端系统为准
-
消息保存时间戳:服务端系统填充,以服务端时间为准
-
消费重试次数:服务端自动标记,初始为0
-
业务自定义属性
-
消息负载
行为约束
-
普通和顺序消息最大不超4MB
-
事务和定时/延时消息最大不超64KB
4.生产者 Producer
在消息生产者中,可以定义如下行为:
-
发送方式:设置发送消息方式,如同步传输和异步传输
-
批量发送:批量发送条数或大小
-
事务行为:如何进行事务检查保证一致性
生产者与主题是多对多的关系
内部属性
-
客户端Id:自动生成、集群内全局唯一
-
通信参数:接入点信息(必选),身份认证信息(可选),请求超时时间(可选)
-
预绑定主题列表:事务消息必须设置,非事务消息建议设置是
-
事务检查器:事务消息配合使用
-
发送重试策略
5.消费者分组 ConsumerGroup
每一个消费者组的订阅关系、投递顺序性、消费重试策略都相同
内部属性
-
消费者分组名称:集群内全局唯一,由用户设置并创建
-
投递顺序性:默认并发投递,向消费者客户端投递消息的顺序
-
消费重试策略:包括最大重试次数、重试间隔
行为约束
-
同一消费者分组下的所有消费者投递顺序一致、消费重试策略一致
6.消费者 Consumer
消费者必须关联一个消费者分组、消费者类型
内部属性
-
消费者分组名称
-
客户端ID:自动生成全局唯一
-
通信参数:接入点信息(必选)、身份认证信息(可选)、请求超时时间(可选)
-
预绑定订阅关系列表:
-
消费者监听器:消费者客户端配置,在使用PushConsumer消费者类型时必须配置
7.订阅关系 Subscription
由消费者分组动态的配置到服务器端系统,并在后续的消息传输中按照订阅关系定义的过滤规则进行消息匹配和消费进度维护
订阅关系判断原则
※ 一个订阅关系指的是某个消费者分组对于某个主题的订阅 一个消费者分组可以订阅多个主题,一个主题也可以被多个消费者分组订阅
内部属性
过滤类型:根据过滤类型过滤信息,TAG过滤、SQL92过滤
学习参考: