与消息队列类似,发布-订阅也是一种促进异步通信的服务到服务通信形式。在发布/订阅模型中,发布到主题的任何消息都会立即推送到该主题的所有订阅者。
消息主题的订阅者通常执行不同的功能,并且每个订阅者可以并行地对消息执行不同的操作。发布者不需要知道谁在使用它正在广播的信息,订阅者也不需要知道消息来自哪里。这种类型的消息传递与消息队列稍有不同,在消息队列中,发送消息的组件通常知道它要发送到的目的地。
工作方式
与消息队列在取回消息之前对消息进行批处理不同,消息主题传输消息时很少或没有队列,并将消息立即推送到所有订阅者。它的工作原理如下:
- 消息主题提供了一种轻量级机制,用于广播异步事件通知和端点,允许软件组件连接到主题,以便发送和接收这些消息。
- 要广播消息,名为发布者的组件只需将消息推送到主题。
- 订阅主题的所有组件(称为订阅者)将接收广播的每个消息。
优点
让我们讨论使用发布订阅的一些优点:
- 消除轮询(Eliminate Polling):消息主题允许即时、基于推送的传递,消除了消息消费者定期检查或“轮询”新信息和更新的需要。这可以减少响应时间和传递延迟,这在不能容忍延迟的系统中可特别有用。
- 动态目标(Dynamic Targeting):发布/订阅使服务的发现更容易、更自然、更不容易出错。发布者只需将消息发布到某个主题,而不需要维护应用程序可以发送消息的对等节点列表。然后,任何感兴趣的一方都可以将其端点订阅到主题,并开始接收这些消息。用户可以更改、升级、增加或消失,系统会动态调整。
- 解耦和独立扩展(Decoupled and Independent Scaling):发布者和订阅者是解耦的,彼此独立工作,这允许我们独立开发和扩展它们。
- 简化通信(Simplify Communication):发布-订阅模型通过删除所有点对点连接来降低复杂性,只需一个到消息主题的连接,这将管理订阅并决定应将哪些消息传递到哪些端点。
特点
现在,让我们讨论发布订阅的一些特点:
推送传输
当消息发布到消息主题时,发布/订阅消息立即推送异步事件通知。当消息可用时,将通知订阅者。
多种传输协议
在发布-订阅模型中,主题通常可以连接到多种类型的端点,如消息队列、无服务器函数、HTTP服务器等。
扇出
当消息被发送到主题,然后被复制并推送到多个端点时,就会发生这种情况。扇出(Fanout)提供异步事件通知,从而允许并行处理。
过滤
此特点使订阅者能够创建消息过滤策略,这样它将只获得感兴趣的通知,而不是接收发布到主题的每一条消息。
持久性
发布/订阅消息服务通常通过在多个服务器上存储同一消息的副本来提供非常高的持久性,并且至少会传输一次。
安全
消息主题对尝试发布内容的应用程序进行身份验证,这允许我们使用加密端点并对网络传输的消息进行加密。
例子
以下是发布订阅常用的一些技术: