RabbitMQ 介绍
RabbitMQ 是被广泛使用的传统消息中间件的代表,它支持多种消息发送协议,得益于 Exchange
的设计,可以灵活配置消息投递规则,支持基于镜像复制的集群高可用模式,配有开箱即用的后台管理系统,有成熟活跃的社区。
RabbitMQ 的整体架构:
RabbitMQ 的使用特点:
- 生产者的消息是发送给
Exchange
模块的,不会直接发送到队列中; -
Exchange
有不同的类型,每种类型可以配置响应的规则,以此决定将消息投递到哪些队列中; - RabbitMQ 的队列和消费者绑定,如果消息需要被多个下游服务消费,那么就需要创建多个队列;
- 队列中的消息只能被消费一次,消费成功后消息就会被移除;
- 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)的概念,用来统一管理一个隔离的环境(用户组、交换器、队列)。