如何解决将retryPolicy与python GRPC客户端一起使用
我已经非常努力地使用GRPC文档的embed retryPolicy(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)
任何人都可以为我指出相关文档,以了解其工作原理或向我解释我的误会吗?
解决方法
我在配置语法上也遇到了同样的问题。
我找到了this。
简而言之,必须将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>
在原型文件中定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。