消息队列面试题, RabbitMQ 中,消息是如何进行路由的?
消息队列面试题, RabbitMQ 中,消息是如何进行路由的?
QA
Step 1
Q:: RabbitMQ 中,消息是如何进行路由的?
A:: RabbitMQ 中,消息通过交换机 (Exchange) 进行路由。交换机有不同类型,如 direct、topic、headers 和 fanout,它们根据绑定键 (binding key) 和路由键 (routing key)
来决定消息的流向。Direct 交换机会将消息发送到路由键完全匹配的队列,Topic 交换机允许路由键使用通配符匹配,Headers 交换机根据消息头属性进行匹配,Fanout 交换机则将消息广播到所有绑定的队列。
Step 2
Q:: Direct Exchange 是如何工作的?
A:: Direct Exchange 根据完全匹配的路由键 (routing key)
将消息发送到对应的队列。生产者在发送消息时指定一个路由键,交换机会查找绑定了相同路由键的队列,并将消息发送到这些队列中。
Step 3
Q:: Topic Exchange 是如何工作的?
A:: Topic Exchange 使用路由键模式进行消息路由。路由键可以包含通配符,例如 '*' 代表一个单词,'#' 代表零个或多个单词。交换机会将消息发送到绑定键符合路由键模式的队列。例如,绑定键 'user.*' 可以匹配 'user.create' 或 'user.delete'
等。
Step 4
Q:: Fanout Exchange 是如何工作的?
A:: Fanout Exchange 将接收到的消息广播到所有绑定的队列中,不考虑路由键。因此,生产者发送到 Fanout 交换机的消息会被传递给所有与该交换机绑定的队列。
Step 5
Q:: Headers Exchange 是如何工作的?
A:: Headers Exchange 根据消息头属性进行路由。绑定时指定一个或多个头属性和对应的值,交换机会检查消息的头属性是否与绑定条件匹配,如果匹配,则将消息发送到对应的队列。