gRPC 协议路由

类别属性
路由路由匹配

功能描述

路由:完成网关转发步骤的第一步,流量请求的入口,其可以根据配置的路由规则将流量引流到对应服务中,从而执行不同的服务策略。该路由接收gRPC协议请求,并将请求转发到对应到上游服务中。

路由操作

1、进入路由列表页面,点击 "创建",Driver选择grpc

2、填写grpc配置,为了方便验证gRPC的不同传输模式的调用情况,方法名在此示例中不填。

字段说明
端口号路由监听端口号,该端口必须是apinto程序的config.yml中已经存在的端口号,详情请点击程序配置说明
域名客户端访问网关时请求的域名地址,从gRPC头部 :authority 中获取,路由匹配规则之一
服务名gRPC服务名
方法名gRPC方法名,不填则默认匹配该服务下的所有方法
路由规则可规定客户端请求的头部参数,路由规则说明请参考路由规则
目标服务路由匹配成功后,将转发到指定上游服务
插件模版插件模版引用
重试次数当上游服务连接失败、连接超时时,重新转发的次数
超时时间请求上游服务的总时间

至此,路由配置完成

快速验证gRPC透传

**Apintoopen in new window**仓库已经包含可测试使用的gRPC服务端和gRPC客户端,使用教程如下:

一、启动gRPC服务端

1、进入到server目录,编译gRPC服务端程序。

cd server/ && go build -o -o grpcServer

2、启动gRPC服务端程序

./grpcServer

当需要绑定证书,启动命令如下:

./grpcServer -key 密钥文件路径 -cert 证书文件路径

启动参数说明

参数名参数说明
key密钥文件路径,文件名称一般以**.key**为后缀
cert证书文件路径,文件名称一般以**.crt**、.pem为后缀
p监听端口号,默认9001
Ip监听IP,默认:0.0.0.0

二、启动gRPC客户端

1、进入到client目录,编译gRPC客户端程序

cd client/ && go build -o grpcClient

2、启动gRPC客户端程序

./grpcClient -addr grpc服务端地址

启动参数说明

参数名参数说明
key密钥文件路径,文件名称一般以**.key**为后缀
cert证书文件路径,文件名称一般以**.crt**、.pem为后缀
addrgrpc服务端地址,默认:127.0.0.1:8099
insecure当连接地址使用tls传输时,是否跳过证书检查
serverName当进行TLS证书校验时,使用该值替换域名信息
authority服务端主机地址,将会被设置到头部 :authority

示例命令

./grpcClient -addr 127.0.0.1:8099

输出消息如下:

2023/02/16 19:00:08 start current request client,please wait...
2023/02/16 19:00:08 err: <nil>
2023/02/16 19:00:08 header: map[content-type:[application/grpc]]
2023/02/16 19:00:08 trailing: map[app:[apinto]]
2023/02/16 19:00:08 msg: hello
2023/02/16 19:00:08 err: <nil>
2023/02/16 19:00:08 header: map[content-type:[application/grpc]]
2023/02/16 19:00:08 trailing: map[app:[apinto]]
2023/02/16 19:00:08 msg: hello
2023/02/16 19:00:08 end current request
2023/02/16 19:00:08 start stream request client,please wait...
2023/02/16 19:00:08 err: <nil>
2023/02/16 19:00:08 header: map[content-type:[application/grpc]]
2023/02/16 19:00:08 trailing: map[app:[apinto]]
2023/02/16 19:00:08 reply apinto
eolink
2023/02/16 19:00:08 end stream request
2023/02/16 19:00:08 start stream response client,please wait...
2023/02/16 19:00:09 header: map[content-type:[application/grpc]]
2023/02/16 19:00:09 trailing: map[app:[apinto]]
2023/02/16 19:00:09 reply map[2023-02-16 19:00:09.127:now is 2023-02-16 19:00:09,name is apinto,eolink]
2023/02/16 19:00:09 end stream response
2023/02/16 19:00:09 start all stream client,please wait...
2023/02/16 19:00:12 header: map[content-type:[application/grpc]]
2023/02/16 19:00:12 trailing: map[app:[apinto]]
2023/02/16 19:00:12 reply map[2023-02-16 19:00:09.136:eolink 2023-02-16 19:00:10.130:eolink 2023-02-16 19:00:11.136:eolink 2023-02-16 19:00:12.132:eolink 2023-02-16 19:00:12.137:close stream]
2023/02/16 19:00:12 end all stream