Grpc协议消息

2020-07-10  本文已影响0人  clive0x

gRpc根据Consumer传参方式分为两类:Unary Call和Server Stream Call归为一类设计,Client Stream Call与Bi Direction Call另外一类。

一、Unary/ServerStream  Call

1.Consumer端发起调用

1.1.向Provider发送Initial Metadata,发起方法调用。发送cmd_server_recv_header消息,消息内容:method_full_name、meta data、authority,

method_full_name格式/service/method_name格式。

1.2.向Provider发送request参数,发送cmd_server_recv_data消息。

1.3.通知Provder结束request参数传递结束,并开启调用方法处理。

发送cmd_server_recv_half_close消息。

1.4.监听获取Provider返回。

2. Provider端接收调用

2.1接收cmd_server_recv_head消息,监听获取Consumer端Request参数。

2.2接收cmd_server_recv_data消息,赋值request参数。

2.3接收cmd_server_recv_half_close消息:

2.3.1判断是否发送过Initial Metadata消息,如果没有,向Consumer发送cmd_client_recv_header消息。消息内容为Metadata。如果有,直接进入下面步骤。

2.3.2从Consumer端成功获取到request参数时,调用业务方法,否则进入2.3.3。

2.3.2.1成功返回,向Consumer发送cmd_client_recv_data消息,消息内容为方法返回值。结束方法调用,向Consumer发送cmd_client_recv_close消息,消息内容:status:0

2.3.2.2失败返回,向Consumer发送cmd_client_recv_close消息,status:13(INTERNAL异常),message:异常消息。

2.3.3未获取到Consumer端request参数,向Consumer发送cmd_client_recv_close消息,消息内容包括status:13(INTERNAL异常),message:Half-closed without a request。

2.4结束方法调用,见2.3.2.1结束方法调用,向Consumer发送cmd_client_recv_close消息。

3. Consumer端返回处理

3.1接收cmd_client_recv_header消息,不作处理。

3.2接收cmd_client_recv_data消息,获取Provider处理结果。

3.3接收cmd_client_recv_close消息结束调用,获取Provider端处理结果,根据status区别处理,如果status非0,Provider端调用异常,进入异常处理。否则进入正常处理。

二、ClientStream/BiStream Call

1. Consumer端发起调用

1.1.向Provider发送Initial Metadata,发起方法调用。发送cmd_server_recv_header消息,消息内容:method_full_name、meta data、authority,

method_full_name格式/service/method_name格式。

2. Provider端接收调用

2.1.收到cmd_server_recv_head消息,调用Provider端方法,并准备接收Consumer request参数。

[if !supportLists]3. [endif]Consumer端发送请求参数

3.1.发送cmd_server_recv_data消息,内容为请求参数。(1次+)

[if !supportLists]4. [endif]Provider端接收参数

4.1.收到cmd_server_recv_data消息,设置请求参数。

[if !supportLists]5. [endif]Consumer端结束参数传递

5.1.发送cmd_server_recv_half_close消息

[if !supportLists]6. [endif]Provider端返回计算结果

6.1判断是否发送过Initial Metadata消息,如果没有,向Consumer发送cmd_client_recv_header消息。消息内容为Metadata。如果有,直接进入下面步骤。

6.2向Consumer发送cmd_client_recv_data消息,消息内容为方法返回值。

6.3结束方法调用,向Consumer发送cmd_client_recv_close消息,消息内容:status:0

7. Consumer端返回处理

7.1接收cmd_client_recv_header消息,不作处理。

7.2接收cmd_client_recv_data消息,获取Provider处理结果。

7.3接收cmd_client_recv_close消息结束调用,获取Provider端处理结果,根据status区别处理,如果status非0,Provider端调用异常,进入异常处理。否则进入正常处理。

上一篇下一篇

猜你喜欢

热点阅读