mirror of https://github.com/grpc/grpc.git
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.
69 lines
1.7 KiB
69 lines
1.7 KiB
# Retry |
|
|
|
This example shows how to enable and configure retry on gRPC clients. |
|
|
|
## Documentation |
|
|
|
[gRFC for client-side retry support](https://github.com/grpc/proposal/blob/master/A6-client-retries.md) |
|
|
|
## 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: |
|
|
|
```bash |
|
$ ./server |
|
``` |
|
|
|
Then run the client: |
|
|
|
```bash |
|
$ ./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](https://github.com/grpc/grpc/blob/master/include/grpc/impl/channel_arg_names.h#L207-L209) 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. |
|
|
|
```c++ |
|
constexpr absl::string_view kRetryPolicy = |
|
"{\"methodConfig\" : [{" |
|
" \"name\" : [{\"service\": \"helloworld.Greeter\"}]," |
|
" \"waitForReady\": true," |
|
" \"retryPolicy\": {" |
|
" \"maxAttempts\": 4," |
|
" \"initialBackoff\": \"1s\"," |
|
" \"maxBackoff\": \"120s\"," |
|
" \"backoffMultiplier\": 1.0," |
|
" \"retryableStatusCodes\": [\"UNAVAILABLE\"]" |
|
" }" |
|
"}]}"; |
|
```
|
|
|