2、了解 RabbitMQ

作者: 温新

图书: 【浅入 Laravel 与 RabbitMQ:实战消息队列技术】

阅读: 159

时间: 2024-04-24 03:19:22

什么是 RabbitMQ

RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol)高级消息队列协议 的消息中间件,最初起源于金融系统,用于在 分布式系统中存储转发消息

RabbitMQ 的优点

RabbitMQ 具有:可靠性、灵活的路由、扩展性、高可用性、多种协议、多语言客户端支持、管理界面、插件机制。

  • 可靠性:使用一些机制保证可靠笥。如持久化、传输确认、发布确认
  • 灵活的路由:在消息进入队列之前,通过 交换器路由 消息
  • 扩展性:多个 RabbitMQ 节点可以组成集群,还可以动态扩展集群节点
  • 高可用:队列可以在集群中的机器上设置镜像,当部分节点出现故障时,队列仍然可用
  • 多种协议:原生支持 AMQP 协议,还支持 STOMP、MQTT
  • 多语言客户端,如支持 PHP、Ruby 等
  • 管理界面:提供了易用的后台管理界面
  • 插件机制:提供了许多插件支持

RabbitMQ 架构

该图是 RabbitMQ 的架构图,展示了生产者如何通过通道连接、和虚拟机与 RabbitMQ 服务器交互的过程。同时,也展示了交换机绑定队列如休协同工作以实现消息的路由存储

  • Producer(生产者):发送消息到 RabbitMQ 的应用程序或服务
  • Connection(连接):表示生产者或消费者与 RabbitMQ 服务器之间的一个 TCP 连接
  • Virtual Host(虚拟主机):消息队列服务器实体
  • Broker(RabbitMQ 服务):消息存储和管理的中心
  • Exchange(交换机机):交换机,用于接收生产者发送的消息,并将其路由到相应的队列
  • Binding(绑定):绑定,定义了交换机和队列之间的关系。当生产者发送消息到交换机时,会根据绑定规则将消息路由到相应的队列
  • Queue(队列):队列,存储消息的地方。消费者从队列中获取并消费消息
  • Consumer(消费者): 通常指的是从RabbitMQ服务器接收消息的应用程序或服务。

再来说一下 Broker

  • Broker 表示 RabbitMQ 服务,每个 Broker 中至少有一个 Virtual host 虚拟主机
  • 每个 Virtual host 中有自己的 交换机、队列,交换机与队列通过 Binding

这些也是 RabbitMQ 核心概念,既然理解含义又要记住它。

交换机与类型

服务器发送消息不会直接发送到队列中,只能将消息发送给交换机,RabbitMQ 根据确定的规则,把消息投递到对应的队列中,这些规则称为路由键,队列通过路由键绑定到交换机上。

交换机的主要工作是接收来自生产者的消息,然后将消息推入到队列。交换机必须知道如何处理收到的消息,是把消息放入对应的队列还是把消息丢弃,这些都有交换机确定。

交换机的类型有:

Name(交换机类型) Default pre-declared names
Direct exchange(直连交换机) (Empty string) and amq.direct
Fanout exchange(扇型交换机) amq.fanout
Topic exchange(主题交换机) amq.topic
Headers exchange(头交换机) amq.match (and amq.headers in RabbitMQ)
  • 直连交换机:将消息路由到那些 BindingKey 和 RoutingKey 完全匹配的队列中,这是默认的交换器模式,适用于简单的一对一消息传递场景
  • 扇型交换机:将所有发送到该交换机的消息路由到所有绑定的队列,而不考虑路由键。适用于广播消息,比如实时消息分发等场景
  • 主题交换机:路由规则更加灵活,可以根据路由键和绑定键的模式进行匹配。这种类型支持更复杂的匹配规则,适用于需要根据多个标准进行消息分发的场景
  • 头交换机:根据消息头部的属性进行路由。用于需要根据消息内容以外的元数据进行路由的场景
请登录后再评论