gRPC Service Config

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中,用户可以显式地设置服务配置。这是为了在单元测试中使用。

原文链接: Service Config in gRPC & gRPC-Go中的一个配置示例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值