1 简介
RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据。使用 Erlang 语音编写,基于 AMQP 协议。
2 核心概念
2.1 Server
又称 Broker,接受客户端的连接,实现 AMQP 实体服务。
2.2 Connection
连接,应用程序与 Broker 的网络连接。
2.3 Channel
网络信道,几乎所有的操作都在 Channel 中进行,Channel 是进行消息读写的通道。客户端可建立多个 Channel ,每个 Channel 代表一个会话任务。
2.4 Message
消息,服务器和应用程序之间传送的数据,由 Properties 和 Body 组成。Properties 可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body 则就是消息体的内容。
2.5 Virtual host
虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个 Virtual host 里面可以有若干个 Exchange 和 Queue ,同一个 Virtual host 里面不能有相同名称的 Exchange 或 Queue。
2.6 Exchange
交换机,接收消息,根据路由键转发消息到绑定的队列。
2.7 Binding
Exchange 和 Queue 中间的虚拟连接,binding 中可以包含 routing key。
2.8 Rounting key
一个路由规则,虚拟机可用它来确定如果路由一个特定消息。
2.9 Queue
也成 Message Queue,消息队列,保存消息并将它们转发给消息者。
3 Exchange 类型
- Direct Exchange:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行比较,如果相等,则发送到该Binding对应的Queue中。
- Topic Exchange:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行对比,如果匹配上了,则发送到该Binding对应的Queue中。
- Fanout Exchange:直接将消息转发到所有binding的对应queue中,这种exchange在路由转发的时候,忽略Routing key。
- Headers Exchange:将消息中的headers与该Exchange相关联的所有Binding中的参数进行匹配,如果匹配上了,则发送到该Binding对应的Queue中。
总结:
- Direct: 等于 Exchange + Routing key
- Topic:匹配 Exchange + Routing key
- Fanout:直接发送到 Queue
- Headers:匹配 Exchange + Binding中的参数