#grpc #grpc-python
#grpc #grpc-python
Вопрос:
Я очень старался использовать встроенную RetryPolicy документации 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)
Может кто-нибудь указать мне соответствующую документацию, чтобы я понял, как это работает, или объяснил мне, что я неправильно понимаю?
Ответ №1:
У меня была такая же проблема с синтаксисом конфигурации.
Я нашел это.
Короче говоря, RetryPolicy должен быть указан как часть 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)])
где <package>
и <service>
определены в вашем файле proto.