传输层 (Transport )
目前官方支持的Transport
- HTTP
- NATS
- Rabbitmq
Transport的作用
- 将传输的内容统一成如下格式,并序列化成
1 | type Message struct { |
- 服务 Node 和 Node 之间的消息传输
协议 (Codec)
目前支持的协议
- JSON
- PROTOBUF
服务底层的协议格式
1 | type Message struct { |
Q&A
- 两个服务节点之间是否可以支持使用不同的
Transport
不支持,因为传输层是需要进行数据序列化和反序列化的,同时节点通讯其实是Transport的Client和Server进行通讯。(Server部分可以使用martini, gin, echo 等框架实现,但是他们同属于HTTP范畴,所以可以认定为相同的Transport)
- 服务于服务之间是如何传输的,如果客户端使用某种协议时,服务端是如何响应并解码的?
Micro 服务是基于 Transport 进行的,Transport 可以有多种实现方式,例如 RabbitMQ,NSQ,HTTP,NTATS……,由于不同的Transport有自己的协议,例如HTTP的协议我们基本可以认为他会分为 Header 和 Body 两个部分,因此,HTTP Transport 的实现就会把请求里的HTTP Request Header 作为 Message 里的 Header, Body 也直接从请求里获取,也就正好填充了 Message 这个结构体,Micro Server 根据 Header 里的 Content-Type 来确定使用哪一种 Codec 来进行解码,目前只有JSON和 ProtoBuf,Codec 的作用是将Body里的数据解码到具体的服务的协议。