作者:手机用户2502857101 | 来源:互联网 | 2023-08-20 09:32
什么是协议
我们知道消息中间件负责数据的传递、存储和分发消费三个部分,数据的存储和分发过程是要遵循协议的,我们是采用底层的TCP/IP协议还是UDP协议还是要自己构建,我们把这种规范称为协议
网络协议的三要素
- 语法。语法是用户数据与控制信息的结构和格式,以及数据出现的顺序。
- 语义,语义是解释控制信息每个部分的意义。他规定了需要发出何种控制信息以及完成的动作与做出的响应。
- 时序,时序是对事件发生顺序的详细说明。
人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
举个例子http协议
语法:http规定了请求报文和响应报文的格式
语义:客户端主动发起请求称为请求
时序: 一个请求对应一个响应(一定先有请求后有响应,这就是时序)
消息队列采用的协议不是http协议,常见的消息队列协议有:OpenWire,AMQP,MQTT,Kafka,OpenMessage等协议。
面试题:为什么消息中间件不直接使用Http协议
1.因为http请求报文头和响应报文头比较复杂,包含了COOKIE,数据加密解密状态码,响应码等附加的功能,但是对于一个消息而言,我们不需要这么复杂,也没有这个必要。它的主要作用就是数据的传递,存储分发就可以了,所以一定追求的是高性能。尽量简洁、快速。
2.大部分情况下http都是短链接,在实际使用中可能会中断,中断之后不能进行持久化,就会造成请求的丢失。这样不利于消息中间件的业务场景,因为消息中间件可能是一个长期的获取消息的过程,出现问题和故障就要对数据或消息进行持久化,目的是为了保障消息和数据的高可靠和稳健的运行。