消息代理(message broker)是一种使应用程序、系统和服务能够相互通信和交换信息的软件。消息代理通过在符合规则的消息传递协议之间转换消息来实现这一点。它允许相互依赖的服务直接“交谈”,即使它们是用不同的语言编写或在不同的平台上实现的。
消息代理可以验证、存储、路由消息以及将消息传递到适当的目的地。它们充当应用程序之间的媒介,允许发送方在不知道接收方在哪里、是否处于活动状态或有多少接收方的情况下发布消息。这有助于系统内流程和服务的解耦。
模型
消息代理提供两种基本的消息分发模式或消息传递样式:
- 点对点消息传递(Point-to-Point messaging):这是消息队列中使用的分发模式,消息的发送者和接收者之间具有一对一的关系。
- 发布-订阅消息传递(Publish-subscribe messaging):在这种通常称为“发布/订阅”的消息分发模式中,每条消息的生产者将其发布到一个主题,多个消息消费者订阅它们希望从中接收消息的主题。
我们将在后面的教程中详细讨论这些消息传递模式。
消息代理 vs 事件流
消息代理可以支持两种或多种消息传递模式,包括消息队列和发布/订阅,而事件流平台仅提供发布/订阅样式的分发模式。事件流平台专为处理大量消息而设计,易于扩展。它们能够将记录流排序为称为主题的类别,并将其存储预定好的时间。然而,与消息代理不同,事件流平台无法保证消息传递或跟踪哪些消费者已收到消息。
事件流平台提供了比消息代理更好的可扩展性,但确保容错(如消息重发)的功能更少,以及更有限的消息路由和排队功能。
消息代理 vs 企业服务总线(ESB)
企业服务总线(ESB)基础设施非常复杂,集成起来很困难,维护起来也很昂贵。在生产环境中出现问题时,很难对它们进行故障排除,它们不容易扩展,更新也很繁琐。
消息代理是 ESB 的“轻量级”替代方案,提供类似的功能,是一种服务间通信机制,成本较低。它们非常适合在微服务体系结构中使用,随着 ESB 的失宠,微服务体系架构变得越来越普遍。
例子
以下是一些常用的消息代理: