RabbitMQ 是被广泛使用的传统消息中间件的代表,它支持多种消息发送协议,得益于 Exchange 的设计,可以灵活配置消息投递规则,支持基于镜像复制的集群高可用模式,配有开箱即用的后台管理系统,有成熟活跃的社区。

RabbitMQ 的整体架构:

RabbitMQ 的使用特点:

  1. 生产者的消息是发送给 Exchange 模块的,不会直接发送到队列中;
  2. Exchange 有不同的类型,每种类型可以配置响应的规则,以此决定将消息投递到哪些队列中;
  3. RabbitMQ 的队列和消费者绑定,如果消息需要被多个下游服务消费,那么就需要创建多个队列;
  4. 队列中的消息只能被消费一次,消费成功后消息就会被移除;
  5. RabbitMQ 的 消息Exchange队列 这三者通过 Bindings 联系在一起;

RabbitMQ 的 Exchange 类型和说明

Exchange type Default pre-declared names 说明
Direct exchange (Empty string) and amp.direct 直接匹配消息的路由键,将消息发送到路由键对应的队列中
Default exchange (Empty string) RabbitMQ 的默认交换器,就是 Direct exchange。RabbitMQ 会自动将队列绑定到和队列名称一致的路由键上,在功能上实现将消息直接发送到对应的队列中
Fanout exchange amq.fanout 扇出将发送给自身的消息路由到所有和它绑定的队列上,忽略路由键,用来实现广播消息
Topic exchange amq.topic 主题交换器根据消息的路由键匹配所有绑定的队列投递消息,用来实现发布/订阅模式
Headers exchange amp.match (and amq.headers in RabbitMQ) 忽略路由键,根据消息头匹配队列

RabbitMQ 的消费端可以选择使用“推”或者“拉”模式获取消息,推荐的方式是“推”模式。

RabbitMQ 有虚拟主机(vhost)的概念,用来统一管理一个隔离的环境(用户组、交换器、队列)。