跳至主要內容

分布式消息中间件实践


分布式消息中间件实践

消息队列

中间件:非底层操作系统软件、非业务应用软件,不是直接给最终用户使用的,不能直接带来价值的软件统称为中间件

消息协议

协议:计算机术语中的协议,就是一个达成一致的并受规则支配的交互集合,例如计算机网络中的七层网络协议,http协议等-----> protocol

计算机领域中 ,只要涉及不同计算机之间要共同完成一件事情的时候,就肯定会有协议的存在,就好比我们说话、沟通用某种语言一样,不用的计算机之间必须要使用相同的语言才能够正常通信、交流

消息协议:用于实现消息队列功能时所涉及的协议。

按照是否向行业开放消息规范文档,可以将消息分为:

  • 开发协议(AMQP、MQTT、STOMP、XMPP等)
  • 私有协议

有些特殊框架(例如:Redis、Kafka、ZeroMQ)更具自身需要未严格遵循MQ规范,而是基于TCP/IP封装的一套协议,通过网络Socket接口进行传输,实现了MQ功能。【这里的协议可以理解为双方通信的一个约定】

AMQP协议

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。百度百科

目前AMQP协议的版本是用两个或者三个数字表示的,格式为:major-minor[-revision]major.minor[.revision],其中:

  • major:主版本号
  • minor:次版本号
  • revision:可选的修订版本号

都是可以用0~99之间的一个数字表示,100以上的数字都被保留下来了,用于内部测试和开发

例如:

  • RabbitMQ支持AMQP 0-9-1 协议
  • ActiveMQ、Apollo、Qpid支持AMQP 0-9-10 协议

一般来说,将AMQP分为三个部分:

  • 基础概念:内部定义的各组件及组件的功能说明
  • `功能命令:协议所定义的一系列的命令,应用程序可以基于这些命令来实现相应的功能。
  • 传输层协议:网络级协议,定义了数据的传输格式,消息队列的客户端可以基于这个协议与消息代理和AMQP的相关模型进行交互通信【包括:数据帧处理、信道复用、内容编码、心跳检测、数据表示和错误处理等。】

基础概念

核心组件的声明周期