Что касается политики повторных попыток RPC (определенной в https://github.com/grpc/proposal/blob/master/A6-client-retries.md), это можно сделать в заглушке клиента Java, предоставив настраиваемую конфигурацию службы при создании канала RPC. Я не могу найти эквивалент CPP. Кто-нибудь пробовалthis?
с использованием ChannelArguments и настройкой serviceConfigJSON (stringVersion)
Этот stringVersion вводит в заблуждение запись. Я использовал это как руководство: https://grpc.github.io/grpc/core/md_doc_service_config.html Пример Java ниже:
Map<String, Object> retryPolicy = new HashMap<>();
retryPolicy.put("maxAttempts", 3D);
retryPolicy.put("initialBackoff", "3s");
retryPolicy.put("maxBackoff", "1s");
retryPolicy.put("backoffMultiplier", 2D);
retryPolicy.put("retryableStatusCodes", Arrays.<Object>asList("UNAVAILABLE", "UNAUTHENTICATED"));
Map<String, Object> methodConfig = new HashMap<>();
Map<String, Object> name = new HashMap<>();
name.put("service", "com.foo.bar.TestService);
methodConfig.put("name", Collections.<Object>singletonList(name));
methodConfig.put("retryPolicy", retryPolicy);
Map<String, Object> serviceConfig = new HashMap<>();
serviceConfig.put("methodConfig", Collections.<Object>singletonList(methodConfig));
return ManagedChannelBuilder
.forAddress(service, queryPort)
.usePlaintext()
.enableRetry()
.disableServiceConfigLookUp()
.defaultServiceConfig( serviceConfig )
.build();