订阅模式示例图:
前面案例中,只有 3 个角色:
角色 | 描述 |
---|---|
P | 生产者,也就是要发送消息的程序。 |
C | 消费者,消息的接受者,会一直等待消息到来。 |
queue | 消息队列,图中红色部分。 |
而在订阅模型中,多了一个 exchange 角色,而且过程略有变化:
角色 | 描述 |
---|---|
P | 生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给 X(交换机)。 |
C | 消费者,消息的接受者,会一直等待消息到来。 |
queue | 消息队列,接收消息、缓存消息。 |
Exchange | 交换机,图中的 X。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于 Exchange 的类型。 |
Exchange 有常见以下 3 种类型:
类型 | 描述 |
---|---|
Fanout | 广播,将消息交给所有绑定到交换机的队列 |
Direct | 定向,把消息交给符合指定 routing key 的队列。 |
Topic | 通配符,把消息交给符合 routing pattern(路由模式) 的队列。 |
Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息会丢失!