AMQP 全称高级消息队列协议(Advanced Message Queuing Protocol),也就是说他是一种协议,是一种标准。
就像java的Java消息服务—— JMS,负责定义标准,遵守JMS标准的消息队列就可以再java平台使用。
不同于JMS将平台限制为java, AMQP 没有限制平台,任何遵守 AMQP 协议的消息队列,可以再任由语言平台上使用,甚至是发送消息和消费消息的是两个语言平台。
作为一种通信协议,AMQP同样存在多个实现,如Apache Qpid、RabbitMQ、ZeroMQ
作用
AMQP 解决了在两个应用系统之间传送消息的各种问题,如
-
网络不可靠 =>消息需要保存后再转发并有出错处理机制
-
与本地调用相比,网络速度慢 =>使用异步调用
-
应用之间是不同的(比如不同语言实现、不同操作系统等) =>二进制数据通信
-
...
AMQP 协议模型
如图,AMQP 协议模型有这么几个重要的概念
Publisher:消息发送者,将消息发送到Exchange并指明Routing Key,以便Message Queue可以正确的收到消息
Consumer:消息接受者,从Message Queue获取消息,一个Consumer可以订阅多个Queue, 来接受Queue中的消息
Server: 一个具体的MQ服务实例
Virtual host: 虚拟主机,一个server下面可以有多个虚拟主机,通常用于隔离不同的项目,一个Virtual host下面通常会有多个Exchange、Message Queue
Exchange:交换器,从Producer接受消息, 根据Bindings中配置的Routing key, 把消息分派到对应的Message Queue中
Routing key:路由键,用于Exchange判断哪些消息需要发送对应的Message Queue
Bindings: 描述了Exchange和Queue之间的关系。Exchange 根据消息内容 (routing key),和Binding配置来决定把消息分派到哪个Queue中
Message Queue: 存储消息, 并把消息传递给最终的 Consumer