AMQP协议是什么?
AMQP协议,所谓的高级消息队列协议,可以把它理解成一种公认的协议规范,就像http协议一样,只是这个AMQP协议针对的是消息队列。这个协议使得遵从了它的规范的客户端应用和消息中间件服务器的全功能互操作成为可能。
了解下AMQP协议的基本概念
- Broker:用于接受信息和分发信息的应用。
- Virtual hosts:在一个Broker上面划分出多个隔离的环境,这多个环境就可以理解成是Virtual hosts,就像使用虚拟机一样,每个虚拟机之间都有完整的组件,各Virtual hosts下的用户、交换器以及队列等互不影响,这样方便不同的业务团队在使用同一个Rabbit server提供的服务时,能够划清界限。
- Connection:消息生产者和消息消费者还有Broker之间的TCP连接,如果要断开连接,只会在客户端断开,而
Broker不会断开连接,除非网络出现了故障或者Broker服务出了问题。 - Channel:通道,如果每一次访问消息队列中间件都建立一个TCP连接的话,那么系统资源会被大量的占用,效率也会降低,所以AMQP提供了Channel机制,共享同一个TCP连接,而一个TCP连接里可以有大量的Channel。假设如果有多个线程访问消息队列中间件服务,每个线程通常都会有自己单独的Channel来做通信,而每个Channel会有自己的Channel id,这样客户端和Broker就能够互相识别Channel,所以Channel之间是完全隔离的。
- Exchange:交换机,这是消息到达Broker的第一站,由于Exchange和Queues之间有绑定键来确定双方发送消息的匹配规则,所以这时Exchange会根据消息的路由键和自己的类型,来匹配绑定规则,将消息分发到对应的Queues上。
- Queue:队列,消息所到达的最终站,消费者从这里拿消息做消费。
- Binding:可以把它理解成一个虚拟的连接,定义了Exchange和Queues之间的匹配规则,只有匹配这个规则的交换机里的消息才会被发送到这个队列里,不过如果消息没法找到匹配的队列的话,那么,根据该条消息的属性,这个消息要么被丢弃,要么返回生产者那里。
Exchange的类型
这里把Exchange和Queues之间的匹配规则称之为绑定键。
类型 | 说明 |
---|---|
direct(直连) | 消息的路由键要和绑定键一模一样才能分发到队列 |
fanout(广播) | 无需绑定键,只要有和这个交换机做绑定的队列,都会收到消息,有点类似发布-订阅 |
topic(主题) | 这个类型的交换机要求消息路由键和绑定键要模糊匹配才能分发,以.号来分割每个词, #号代表匹配多个词,*号代表匹配只一个词 |
headers(header属性) | 这种类型的交换机不再是基于路由键了,而是基于消息中的header属性,只有消息中header属性的值与绑定键相同时,消息才会被分发到相应的队列中 |
默认交换机 | 如果不指定上述的交换机类型,就会使用默认的direct类型,同时绑定键默认是队列名,所以消息会分发到与路由键同名的队列里 |