我刚刚开始研究rabbit,出现了以下问题:如果我有一个名称为
adverts
的交换TOPIC类型和一个队列:
adverts_create (routing_key: `advert.create`)
adverts_edit (routing_key: `advert.edit`)
那么我可以同时向多个队列发送消息吗?像这样的东西:
$msg = new AMQPMessage('text');
$channel->basic_publish($msg, 'adverts', 'advert.*');
主题交换允许基于路由键中的通配符模式更灵活地路由消息。
在您的示例中,您有两个与名为 adverts 的主题交换关联的队列(adverts_create 和 adverts_edit)。路由键是 advert.create 和 advert.edit。
如果您想将消息发送到匹配某种模式的多个队列,那么在将消息发布到主题交换器时,您确实可以在路由键中使用通配符。在 RabbitMQ 中,路由键遵循点分隔的层次结构,您可以使用星号 (*) 作为通配符来匹配该位置的任何单词。
例如,您的代码片段:
$msg = new AMQPMessage('text');
$channel->basic_publish($msg, 'adverts', 'advert.*');
此代码将使用以 advert 开头的路由键将消息发布到绑定到 adverts 交换的任何队列。后面还有一个词。因此,在这种情况下,advert.create 和 advert.edit 队列都会收到消息。
只需确保队列使用适当的路由密钥模式正确绑定到交换机。