将retryPolicy与python GRPC客户端一起使用



我已经非常努力地使用GRPC文档的嵌入重试策略(https://github.com/grpc/proposal/blob/master/A6-client-retries.md#retry-policy(,但我不明白在代码中应该在哪里设置配置
理想情况下,我希望python客户端指定其重试策略,但我也有兴趣了解如何从服务器端管理它。

经过一番挖掘,我想出了这个剪下来的,但它不起作用。

import json
from grpc import insecure_channel
service_default_config = {
# see https://github.com/grpc/proposal/blob/master/A6-client-retries.md#retry-policy-capabilities
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "1s",
"maxBackoff": "10s",
"backoffMultiplier": 2,
"retryableStatusCodes": [
"RESOURCE_EXHAUSTED",
"UNAVAILABLE"
]
}
}
service_default_config = json.dumps(service_default_config)
options = [
('grpc.service_config', service_default_config)
]
insecure_channel(hostname, options=options)

有人能给我指一下相关的文件,让我理解这是如何工作的,或者向我解释我误解了什么吗?

我在配置的语法上也遇到了同样的问题。

我发现了这个。

简而言之,retryPolicy必须指定为methodConfig的一部分,methodConfig描述了如何处理对特定服务的调用:

import json
import grpc
json_config = json.dumps(
{
"methodConfig": [
{
"name": [{"service": "<package>.<service>"}],
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.1s",
"maxBackoff": "10s",
"backoffMultiplier": 2,
"retryableStatusCodes": ["UNAVAILABLE"],
},
}
]
}
)
address = 'localhost:50051'
channel = grpc.insecure_channel(address, options=[("grpc.service_config", json_config)])

其中CCD_ 1和CCD_。

相关内容

最新更新