功能
- 缓存不同进程间传输的数据,从而能够异步处理
- 解耦不同服务,提高系统稳定性和拓展性
- 对不稳定的大流量进行削峰处理
组成
Broker
- 消息中间件的消息存储和转发服务器
- 每个broker节点都会在启动时遍历Nameserver列表,与对应的服务建立长连接,注册自己的信息,并定时上报
Nameserver
- 提供了路由管理,服务注册,服务发现的功能
- 集群中的broker,peoducer,comsumer都需要定时向Nameserver汇报自己的状态,以便于发现彼此,否则会被剔除
- 可以部署多个Nameserver,集群中的角色需要同时向他们汇报,确保高可用
Producer
- 随机选择一个Nameserver节点建立长连接,获得topic路由信息
- 接下来与提供topic的master(只有master才能向写入消息)建立长连接,并定时发送心跳
- 需要指定GroupName,NameServer,Topic,Tag(可选)
- 可以选择同步发送和异步发送,异步发送需要在发送时指定成功和失败的回调函数
Comsumer
- 通过Nameserser获取topic路由信息,连接到对应的broker消费信息
- 由于Master和Slave都可以读取消息,因此Consumer会与Master和Slave都建立连接进行消费消息
- 需要指定GroupName,NameServer,Topic,Tag(可选),并注册监听器
核心概念
Message
- 承载消息
- 发送消息时,需要指定必须的topic,可选的tag用于过滤消息
Topic
- 对消息进行逻辑分类
- 由若干个queue组成
- 发送和消费消息的时候都需要指定消息
Queue
- 使用队列存储message,供consumer消费
- 如果一个topic有四个queue,但是存在五个consumer,那么由于负载均衡策略,有一个consumer不会工作
Tag
- 对topic进一步细分,用于过滤消息选择性消费
Message Model
- 由集群和广播组成
- 集群模式
- 每条消息只需要被处理一次,broker只会把消息发送给消费集群中的一个消费者
- 在消息重投时,不能保证路由到同一台机器上
- 消费状态由broker维护
- 广播模式
- 消费进度由consumer维护
- 保证每个消费者都消费一次消息
- 消费失败的消息不会重投
- 集群模式
Message Order
- 由顺序和并发组成
Producer Group
- 消息生产者组
Consumer Group
- 消息消费者组
实现
- 将Broker注册到Nameserver上
- Producder发送信息时从NameServer上获取发送信息的Topic
- Producer和所有提供服务的Master建立长连接,并定时发送心跳
- Consumer通过NameServer集群获取Topic路由信息
- Consuemer与所有的Master和Slave建立长连接,监听新消息
- Consumer在消费完成后会进行ACK确认,如果未确认则表示消费失败,此时Broker会采取重试策略(仅集群模式)
Last updated on