gRPC中的服务配置
目的
服务配置是一种机制,允许服务所有者发布参数以供其服务的所有客户端自动使用。
格式
服务配置是以下形式的JSON字符串:
{
// 负载均衡策略名称(不区分大小写)。
// 目前,gRPC提供的唯一可选择的客户端策略是“round_robin”,但是第三方可以添加自己的策略。
// 这个字段是可选的; 如果未设置,默认行为是选择第一个可用的后端地址。
// 如果策略名称是通过客户端API设置的,则该值将覆盖此处指定的值。
//
// 请注意,如果解析器返回至少一个均衡器地址(因为与后端地址相反),gRPC将使用grpclb策略而不管在这里或者通过客户端API请求什么LB策略。
'loadBalancingPolicy': string,
// 方法配置。可选的。
'methodConfig': [
{
// 此方法配置应用的方法的名称。必须至少有一个名字。每个名称条目在整个服务配置中都必须是唯一的。
// 如果“method”字段为空,则此方法默认配置为指定服务的所有方法。
//
// 例如,假设服务配置包含以下方法配置条目:
//
// 'methodConfig': [
// { 'name': [ { 'service': 'MyService' } ] ... },
// { 'name': [ { 'service': 'MyService', 'method': 'Foo' } ] ... }
// ]
//
// 对于MyService/Foo的请求,我们将使用第二个条目,因为它完全匹配到服务和方法名称。
// 对于MyService/Bar的请求,我们将使用第一个条目,因为它为MyService的所有方法提供默认值。
'name': [
{
// RPC服务名称。必填的。
// 如果使用带protobuf的gRPC作为IDL,那么这将是pkg.service_name形式,其中“pkg”是在proto文件中定义的包名称。
'service': string,
// RPC方法名称。可选(见上述)。
'method': string,
}
],
// 发送到这个方法的RPC是否应该等到连接默认为准备就绪。
// 如果为false,则RPC将在连接到服务器的瞬间失败时立即中止。否则,gRPC会尝试连接,直到超过截止日期。
//
// 通过gRPC客户端API指定的值将覆盖此处设置的值。但是请注意,在客户端API中设置值也会影响在名称解析期间遇到的暂时错误,
// 这个值不能被这里的值所捕获,因为服务配置是由gRPC客户端通过名称解析获得的。
'waitForReady': bool,
// 发送到此方法的RPC的默认超时值(以秒为单位)。 这可以在代码中被覆盖。
// 如果在指定的时间内没有收到应答,则请求被中止,并且超过截止时间错误状态被返回给调用者。
//
// 使用的实际截止日期将是这里指定的值和应用程序通过gRPC客户端API设置的值的最小值。
// 如果其中一个没有设置,那么另一个将被使用。如果都没有设置,那么请求没有截止日期。
//
// 值的格式是这里定义的“持续时间”类型的格式:
// https://developers.google.com/protocol-buffers/docs/proto3#json
'timeout': string,
// 单个请求或对象允许的最大有效负载大小, 在一个流(客户端 -> 服务器)中以字节为单位。
// 被测量的大小是以字节为单位的序列化,未压缩的有效载荷。这适用于流和非流请求。
//
// 实际使用的值是此处指定的值和通过gRPC客户端API由应用程序设置的值的最小值。
// 如果其中一个没有设置,那么另一个将被使用。如果没有设置,则使用内置的默认值。
//
// 如果客户端试图发送一个大于这个值的对象,它将不会被发送,客户端会看到一个错误。
// 请注意,0是一个有效的值,这意味着请求消息必须是空的。
'maxRequestMessageBytes': number,
// 单个响应或对象允许的最大有效负载大小在一个流(服务器 -> 客户端)中以字节为单位。
// 被测量的大小是以字节为单位的序列化,未压缩的有效载荷。这适用于流和非流请求。
//
// 实际使用的值是此处指定的值和通过gRPC客户端API由应用程序设置的值的最小值。
// 如果其中一个没有设置,那么另一个将被使用。如果没有设置,则使用内置的默认值。
//
// 如果一个服务器试图发送一个大于这个值的对象,它将不会被发送,客户端会看到一个错误。
// 注意0是一个有效的值,这意味着响应消息必须是空的。
'maxResponseMessageBytes': number
}
]
}
请注意,随着新功能的引入,未来可能会添加新的每个方法参数。
结构
服务配置与服务器名称相关联。当要求解析特定服务器名称时,名称解析器插件将返回已解析的地址和服务配置。
APIs
服务配置用于以下API:
- 在解析器API中,解析器插件用于将服务配置返回给gRPC客户端。
- 在gRPC客户端API中,用户可以查询通道以获取与通道关联的服务配置(用于调试目的)。
- 在gRPC客户端API中,用户可以显式地设置服务配置。这是为了在单元测试中使用。