写点什么

RabbitMQ 组件介绍

  • 2023-04-13
    河北
  • 本文字数:1022 字

    阅读完需:约 3 分钟

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 的值。

发布于: 刚刚阅读数: 4
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
RabbitMQ组件介绍_RabbitMQ_穿过生命散发芬芳_InfoQ写作社区