美文网首页
Grpc协议消息

Grpc协议消息

作者: clive0x | 来源:发表于2020-07-10 09:09 被阅读0次

    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端调用异常,进入异常处理。否则进入正常处理。

    相关文章

      网友评论

          本文标题:Grpc协议消息

          本文链接:https://www.haomeiwen.com/subject/jtdpcktx.html