Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
rabbitmq中AMQP的模型概念:
Broker:接收和分发消息的应用。
Virtual host:出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace的概念。当多个不同的用户使用同一个rabbitmq server的服务的时候,可以划分多个 vhost,每个用户在自己的vhost创建 exchange/queue 等。每个vhost本质上是一个mini版的rabbitmq服务器,拥有自己的队列、交换器和绑定,更重要的是它拥有自己的权限机制。vhost之于rabbit就行虚拟机之于物理服务器一样,它们通过各个实例间提供逻辑上分离,允许你为不同的应用程序安全保密的运行数据。它既能将rabbit众多客户区分开,又可以避免队列和交换器的命名冲突。你可以只运行一个rabbit服务,然后按需启动和关闭vhost。vhost是AMQP感念的基础,你必须在连接时进行指定。默认vhost是:/ 。
Connection:publisher / consumer 和 broker 之间的TCP连接,断开连接的操作只会在client端操作。Broker不会断开连接,除非出现网络故障或broker服务出现问题。
Channel:如果每一次访问rabbitmq都会建立一个connection(TCP),在消息量大的时候会建立大量的connection连接,此时的开销大,效率低。Channel(信道)是在connection的内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread建立独立的channel进行通讯。AMQP method包含了channel id,帮助客户端、message和broker识别channel,所以channel之间是完全隔离的。channel做为轻量级的connection极大的减少了操作系统建立 tcp connection的开销。
Exchange:message到达broker的第一站,根据分发规则,匹配查询表中的routingKey,分发消息到队列中。常用的类型有:direct、fanout、topic、header。
Queue:存放消息的容器,消费者会从消费queue中的消息。
Binding:exchange和queue之间的虚拟连接。bingding中可以包含routingKey。Binding信息被保存到exchange中的查询表中,用于message的分发依据。