The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#) https://grpc.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Yijie Ma 1913e16526 [example] Add C++ retry example (#37034) 6 months ago
..
BUILD [example] Add C++ retry example (#37034) 6 months ago
CMakeLists.txt [example] Add C++ retry example (#37034) 6 months ago
README.md [example] Add C++ retry example (#37034) 6 months ago
client.cc [example] Add C++ retry example (#37034) 6 months ago
server.cc [example] Add C++ retry example (#37034) 6 months ago

README.md

Retry

This example shows how to enable and configure retry on gRPC clients.

Documentation

gRFC for client-side retry support

Try it

This example includes a service implementation that fails requests three times with status code Unavailable, then passes the fourth. The client is configured to make four retry attempts when receiving an Unavailable status code.

First start the server:

$ ./server

Then run the client:

$ ./client

Expected server output:

Server listening on 0.0.0.0:50052
return UNAVAILABLE
return UNAVAILABLE
return UNAVAILABLE
return OK

Expected client output:

Greeter received: Hello world

Usage

Define your retry policy

Retry is enabled via the service config, which can be provided by the name resolver or a GRPC_ARG_SERVICE_CONFIG channel argument. In the below config, we set retry policy for the "helloworld.Greeter" service.

maxAttempts: how many times to attempt the RPC before failing.

initialBackoff, maxBackoff, backoffMultiplier: configures delay between attempts.

retryableStatusCodes: Retry only when receiving these status codes.

constexpr absl::string_view kRetryPolicy =
    "{\"methodConfig\" : [{"
    "   \"name\" : [{\"service\": \"helloworld.Greeter\"}],"
    "   \"waitForReady\": true,"
    "   \"retryPolicy\": {"
    "     \"maxAttempts\": 4,"
    "     \"initialBackoff\": \"1s\","
    "     \"maxBackoff\": \"120s\","
    "     \"backoffMultiplier\": 1.0,"
    "     \"retryableStatusCodes\": [\"UNAVAILABLE\"]"
    "    }"
    "}]}";