AMQP 协议

5,174 阅读2分钟

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

参考

AMQP-0-9-1中文规范