原文地址:https://github.com/grpc/grpc/blob/master/doc/service_config.md
gRPC的服务配置
目标
服务配置是一种允许服务拥有者去发布参数以自动的被所有对应的客户端使用的机制。
格式
服务配置是一个如下格式的JSON字符串:
{ // 负载均衡策略名 (不区分大小写). // 目前,客户端侧gRPC提供的唯一可用的是‘轮询调度‘,但是第三方可能会添加他们自己的策略。 // 这个字段是可选的;如果没设置,默认的行为是获取第一个可用的后台服务。 // 如果已经通过客户端的API设置了策略名,那么那个值会覆盖此值。 // // 注意如果解析器返回至少一个均衡器地址(与后台地址相反),gRPC会使用grpclb(查看这里), // 而不管这里或通过客户端API请求的负载均衡策略。 ‘loadBalancingPolicy‘: string, // 单方法配置。可选。 ‘methodConfig‘: [ { // 当前方法配置应用的方法名。必须至少有一个方法名。 // 每个名称必须在整个服务配置中是独一无二的。如果方法字段为空, // 那么这个方法配置指定指定服务的所有方法的默认值。 // // 例如,加入服务配置包含如下方法配置: // // ‘methodConfig‘: [ // { ‘name‘: [ { ‘service‘: ‘MyService‘ } ] ... }, // { ‘name‘: [ { ‘service‘: ‘MyService‘, ‘method‘: ‘Foo‘ } ] ... } // ] // // 对于一个MyService/Foo的请求,我们将使用第二个配置,因为它最匹配服务和方法名。 // 对于一个MyService/Bar的请求,我们将使用第一个配置,因为它提供对于MyServer的额所有方法的默认值。 ‘name‘: [ { // RPC服务名。必须。 // 如果使用包含protobuf的gRPC作为接口描述语言(IDL), // 那么这将是一种"pkg.service_name"的格式,其中"pkg"是包名。 // 定义在proto文件中。 ‘service‘: string, // RPC方法名。可选(查看上面)。 ‘method‘: string, } ], // RPCs发送到此方法时是否等待直到连接准备好的默认值。 // 如果为false,RPC会在连接服务器失败的瞬间立即中止。 // 否则,gRPC将会尝试连接直到达到最后期限。 // // 通过gRPC客户端API指定的这个值将会覆盖在此配置的值。 // 然而,注意在客户端API配置的值同样会在名称解析过程中遇到瞬间的错误。 ‘waitForReady‘: bool, // PRCs发送到此方法的默认超时时间(秒)。这个可以在代码中重写。 // 如果在指定的这段时间内没有收到回复, // 请求中止并且一个到达最后期限的错误状态码返回给调用者。 // // 使用的实际的最后期限值会是在这里指定的值和通过gRPC客户端API设置给应用程序的值的最小值。 // 如果其中一个没设置,那么将会使用另外一个。 // 如果都没设置,那么请求将没有最后期限。 // // 这个值的格式是定义在 // https://developers.google.com/protocol-buffers/docs/proto3#json // 的‘Duration‘类型 ‘timeout‘: string, // 对于一个单独的请求最大允许的有效载荷或对象流的字节大小(客户端->服务端)。 // 这个大小是以序列化非压缩的有效载荷的字节数度量。这个应用于流和非流的请求。 // // 使用的实际值是在此指定的值和通过gRPC客户端API设置给应用程序的值的最小值。 // 如果其中一个没设置,那么将会使用另外一个。 // 如果都没设置,那么请求将没有最后期限。 // // 如果一个客户端尝试发送一个大于当前值的对象, // 它将不会发送并且客户端会看到一个错误。 // 注意0是一个有效值,意味着请求消息必须为空。 ‘maxRequestMessageBytes‘: number, // 对于一个单独的响应最大允许的有效载荷或对象流的字节大小(客户端->服务端)。 // 这个大小是以序列化费压缩的有效载荷的字节数度量,这个应用与流和非流的请求。 // // 使用的实际值是在此指定的值和通过gRPC客户端API设置给应用程序的值的最小值。 // 如果其中一个没设置,那么将会使用另外一个。 // 如果都没设置,那么内置的默认值将会被使用。 // // 服务一个服务器尝试发送一个大于当前值的对象, // 它将不会被发送并且客户端将会看到一个错误。 // 注意0是一个有效值,意味着响应消息必须为空。 ‘maxResponseMessageBytes‘: number } ] }
注意新的每个方法的参数可能会在新的功能介绍时被添加。
架构
一个服务配置与服务名相关。名称解析插件,当被请求解析一个部分的服务名,将会返回解析的地址列表和服务配置。
TODO(roth): 设计服务配置将会如何在DNS里编码。
APIs
服务配置用于如下的API:
- 在解析API,被解析器插件用于返回服务配置给gRPC客户端。
- 在gRPC客户端API,用户可以通过查询通道来获得和这个通道关联的配置(用于调试目的)。
- 在gRPC客户端API,用户可以显式的设置服务配置。意在使用于单元测试。
原文地址:https://www.cnblogs.com/qq332398135/p/8530644.html
时间: 2024-10-05 04:55:55