Как создать сервисный конфиг в CPP для каналов Grpc? - PullRequest
0 голосов
/ 19 октября 2019

Что касается политики повторных попыток 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();
...