在尝试理解直接,扇出和主题交换之间的区别时,我想确认主题交换的优点是生产者推送到交换并指定完全特定的路由密钥,并且队列可以通过绑定到多个路由密钥通配符.例如主题推动……
$channel->basic_publish($msg, 'logs-exchange', 'error.critical.ram')
并且一个队列可以通知所有关键错误的待命队伍……
$channel->queue_bind('on-call-team', 'logs-exchange', 'error.critical.*')
一个类似的队列有错误.*.ram会告诉负责增加内存的sysops团队.
这是主题交换的正确用例,主题交换是唯一可以支持这种灵活性的交换吗?相反,主题和扇出交换是否可以通过主题交换实现?
最佳答案
Is this the correct use case for a topic exchange,
是的,绝对正确使用此交换.你会发现它非常强大
and is the topic exchange the only exchange that can support this flexibility?
是的,类似的直接交换不支持通配符,因此您必须在绑定时指定完整的路由密钥,否则它将不会接收消息.可能有使用主题交换作为基础的自定义消息,但我无法想到一个
Conversely are both topic and fanout exchanges implementable by a topic exchange?
我不确定你的意思.是的,您可以使用相同的绑定密钥将多个队列绑定到交换机,因此它们都将收到相同的消息.但是,如果您不需要该功能,那么您也可以使用扇出交换本身.
另外,我有一个扇出交换,绑定到一些队列和主题交换.此交换的发布者使用路由密钥,即使扇区交换不需要它,也需要将其路由到的主题交换.这很好,因为它对我们引起主题交换问题的扇出没有影响