RabbitMQ 组件介绍
RabbitMQ 中有几个非常重要的组件:服务实体(Broker)、虚拟主机(Virtual Host)、交换机(Exchange)、队列(Queue)和绑定(Binging)。
服务实体(Broker):标识消息队列的服务器实体。
虚拟主机(Virtual Host):一个虚拟主机只有一组交换机、队列和绑定,为什么还需要多个虚拟主机呢?很简单,在 RabbitMQ 中,用户只能在虚拟主机的粒度上进行权限控制。因此,如果需要禁用 A 组访问 B 组的交换机/队列/绑定,就必须为 A 和 B 分别创建一个虚拟主机,每个 RabbitMQ 服务器都有一个默认的虚拟主机“/”。
交换机(Exchange):客户端不会直接给服务端发送消息,而是通过交换机转发。交换机用于转发消息,但是它不会进行存储,如果没有消息队列发送到交换机,它就会直接丢弃生成者(Producer)发送过来的消息。
队列(Queue):用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列中,等待消费者连接到这个队列将其取走。
绑定(Binging):也就是交换机需要与队列相互绑定。
交换机(Exchange)的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,只是把消息分发给各自的队列。
BindingKey 是交换机和消息队列绑定的规则描述。RoutingKey 是消息发送时携带的消息路由信息描述。当消息发送到交换机(Exchange)时,通过消息携带的 RoutingKey 与当前交换机所有绑定的 BindingKey 进行匹配,如果满足匹配规则,则往 BindingKey 所绑定的消息队列发送消息,这样就解决了向 RabbitMQ 发送一次消息,可以分发到不同的消息队列,实现消息路由分发的功能。
交换机有 Direct、Topic、Headers 和 Fanout 四种消息分发类型。不同的类型在处理绑定到队列方面的行为时会有所不同。
1)Direct:其类型的行为是“先匹配,再发送”,即在绑定时设置一个 BindingKey,当消息的 RoutingKey 匹配队列绑定的 BindingKey 时,才会被交换机发送到绑定的队列中。
2)Topic:按规则转发消息(最灵活)。支持用“”或“#”的模式进行绑定。“”表示匹配一个单词,“#”表示匹配 0 个或者多个单词。比如,某消息队列绑定的 BindingKey 为“*.user.#”时,能够匹配到 RoutingKey 为 usd.user 和 eur.user.db 的消息,但是不匹配 user.hello。
3)Headers:设置 header attribute 参数类型的交换机。根据应用程序消息的特定属性进行匹配,这些消息可能在绑定 key 中标记为可选或者必选。
4)Fanout:转发消息到所有绑定队列(广播)。将消息广播到所有绑定到它的队列中,而不考虑队列绑定的 BindingKey 的值。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/138238d9b492ca858d4010fc0】。文章转载请联系作者。
评论