文档:gRPC服务配置
gRPC服务配置
https://github.com/grpc/grpc/blob/master/doc/service_config.md
目标
服务配置是一种机制,它允许服务所有者发布参数,让其服务的所有客户端自动使用。
格式
服务配置的格式由 grpc.service_config.ServiceConfig
protocol buffer
message 定义。请注意,随着新功能的引入,未来可能会添加新的字段。
架构
服务配置与服务器名相关联。名称解析器插件在被要求解析某个服务器名称时,会同时返回解析的地址和服务配置。
名称解析器以 JSON 形式将服务配置返回给 gRPC 客户端。各个解析器实现决定服务配置的存储位置和格式。如果解析器实现以 protobuf 形式获取服务配置,则必须使用正常的 protobuf 到 JSON 的转换规则将其转换为 JSON。另外,解析器实现也可以以 JSON 形式获取服务配置,在这种情况下,它可以直接返回服务配置。
有关 DNS 解析器插件如何支持服务配置的详情,请参见 gRFC A2: Service Config via DNS.
例子
下面是一个protobuf形式的服务配置示例:
{
// 使用 round_robin 负载均衡策略
load_balancing_config: { round_robin: {} }
// 这个方法配置适用于 "foo/bar" 方法和 service "baz"的所有方法
method_config: {
name: {
service: "foo"
method: "bar"
}
name: {
service: "baz"
}
// 匹配方法的默认超时
timeout: {
seconds: 1
nanos: 1
}
}
}
下面是同样的JSON形式的服务配置示例:
{
"loadBalancingConfig": [ { "round_robin": {} } ],
"methodConfig": [
{
"name": [
{ "service": "foo", "method": "bar" },
{ "service": "baz" }
],
"timeout": "1.0000000001s"
}
]
}
API
服务配置在以下API中使用:
- 在 resolver API中,用于解析器插件,以便将服务配置返回给gRPC客户端
- 在 gRPC 客户端 API 中,用户可以查询 channel 以获取与通道相关的服务配置(用于调试)。
- 在 gRPC 客户端 API 中,用户可以显式地设置服务配置。这可以用来在单元测试中设置配置。它还可以用来设置默认配置,如果解析器插件没有返回服务配置,就会使用该配置。