概念 #
- 支持4中消息类型:普通消息,顺序消息,事物消息和延时消息
主题(Topic) #
消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。
主题是一个逻辑概念,并不是实际的消息容器。
主题内部由多个队列组成。
支持强制校验消息类型,即每个主题Topic只允许发送一种消息类型的消息,强制校验功能默认开启。
使用建议 #
主题拆分设计应遵循大类统一原则,即将相同业务域内同一功能属性的消息划分为同一主题。
例如: 线上商品购买场景下,订单交易如订单创建、支付、取消等流程消息使用一个主题,物流相关消息使用一个主题,积分管理相关消息使用一个主题。
队列(MessageQueue) #
消息存储和传输的实际容器,也是 Apache RocketMQ 消息的最小存储单元。
默认提供消息可靠存储机制,所有发送成功的消息都被持久化存储到队列中。
向主题内发送消息,但实际消息发送到该主题下的某个队列中。
消息(Message) #
消息是 Apache RocketMQ 中的最小数据传输单元。
消息模型具备如下特点:
- 消息不可变性:消息的内容不会发生改变
- 消息持久化:默认对消息进行持久化
消息发送到主题,存储在到哪个队列有服务端自动指定,不需要使用者指定。
默认的消息最大限制如下:
普通和顺序消息:4 MB
事务和定时或延时消息:64 KB
生产者(Producer) #
被集成在业务系统中,将业务消息按照要求封装成 Apache RocketMQ 的消息(Message)并发送至服务端。
关键内部属性(创建生产者的参数):
- 预绑定主题列表:事务消息 (必须设置),非事务消息 (建议设置)
使用建议:
- 不建议单一进程创建大量生产者,生产者和主题是多对多的关系,支持同一个生产者向多个主题发送消息。
- 不建议频繁创建和销毁生产者,生产者是可以重复利用的底层资源,类似数据库的连接池。
消费者分组(ConsumerGroup) #
承载多个消费行为一致消费者的负载均衡分组,并不是运行实体,而是一个逻辑资源。
Apache RocketMQ 的消费者和主题是多对多的关系。
消费者(Consumer) #
接收并处理消息的运行实体。
订阅关系(Subscription) #
一个订阅关系指的是指定某个消费者分组对于某个主题的订阅。
是消费者获取消息、处理消息的规则和状态配置。
订阅关系由消费者分组动态注册到服务端系统,并在后续的消息传输中按照订阅关系定义的过滤规则进行消息匹配和消费进度维护。
同一消费者分组内的消费者在消费逻辑上必须保持一致,否则会出现消费冲突,导致部分消息消费异常。