服务间消息传递架构通常分为两种,一种是无代理消息架构(服务和服务之间直接传递消息),一种是基于代理的消息架构(服务把消息传递给消息代理,消息代理将消息再传递给接收方)
无代理消息架构的优劣
优势
- 有着更低的延迟,无须经过代理
- 避免了因为消息代理而出现的问题
- 复杂度低,无须维护消息代理
劣势
- 必须使用服务发现机制来找到接收方
- 消息无法保存,发送方和接收方必须同时在线
代理消息架构的优劣
优势
- 发送方不需要知道接收方的位置,也不必关心接收方是否在线,只要将消息交给消息代理即可
- 能够缓存消息,可以保持消息存在于消息代理,直到消息被接收方消费
- 更为灵活的通信机制(包括单向通知,发布/订阅,发布/异步响应)
PS:所谓的发布/异步响应,就是发送方在消息头部中指定回复通道,同时将messageId等相关性id写入回复通道,在发布/订阅通道内发布消息,接收方订阅发布/订阅通道,并将包含messageId等相关性id的消息通过回复通道返回
劣势
- 相比起来没有无消息代理架构速度快
如何选择一个好的消息代理
选择一个好的消息代理要注意以下几点