分布式消息中间件实践
About 7 min
分布式消息中间件实践
消息队列
中间件
:非底层操作系统软件、非业务应用软件,不是直接给最终用户使用的,不能直接带来价值的软件统称为中间件
消息协议
协议
:计算机术语中的协议,就是一个达成一致的并受规则支配的交互集合,例如计算机网络中的七层网络协议,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的相关模型进行交互通信【包括:数据帧处理、信道复用、内容编码、心跳检测、数据表示和错误处理等。】