4

在试图理解直接、扇出和主题交换之间的区别时,我想确认主题交换的优点是生产者推送到交换并指定完全特定的路由键,队列可以通过绑定到多个路由键通配符。例如主题推送到...

$channel->basic_publish($msg, 'logs-exchange', 'error.critical.ram')

一个队列会向待命团队发送关于所有严重错误的消息,就像......

$channel->queue_bind('on-call-team', 'logs-exchange', 'error.critical.*')

一个类似的队列error.*.ram会向负责增加内存的系统操作团队发送消息。

这是主题交换的正确用例吗?主题交换是唯一可以支持这种灵活性的交换吗?相反,主题交换和扇出交换都可以通过主题交换实现吗?

4

1 回答 1

3

这是主题交换的正确用例吗?

是的,此交换的绝对正确用法。你会看到它非常强大

主题交换是唯一可以支持这种灵活性的交换吗?

是的,类似的直接交换将不支持通配符,因此您必须在绑定时指定完整的路由密钥,否则它将无法接收消息。可能有使用主题交换作为基础的自定义消息,但我想不出一个

相反,主题交换和扇出交换都可以通过主题交换实现吗?

我不确定你在这里的意思。是的,您可以使用相同的绑定键将多个队列绑定到交换器,因此它们都会收到相同的消息。但是,如果您不需要该功能,那么您不妨使用扇出交换本身。

此外,我有一个绑定到一些队列和主题交换的扇出交换。此交换的发布者使用路由密钥,即使扇出交换不需要它,但它被路由到的主题交换需要它。这很好,因为它对扇出没有影响,因为我们对主题交换造成了问题

于 2013-02-27T07:34:16.937 回答