|
|
||
|---|---|---|
| .. | ||
| client | ||
| server | ||
| README.md | ||
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:
go run server/main.go
Then run the client. Note that when running the client, GRPC_GO_RETRY=on must be set in
your environment:
GRPC_GO_RETRY=on go run client/main.go
Usage
Define your retry policy
Retry is enabled via the service config, which can be provided by the name resolver or a DialOption (described below). In the below config, we set retry policy for the "grpc.example.echo.Echo" method.
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.
var retryPolicy = `{
"methodConfig": [{
// config per method or all methods under service
"name": [{"service": "grpc.examples.echo.Echo"}],
"waitForReady": true,
"retryPolicy": {
"MaxAttempts": 4,
"InitialBackoff": ".01s",
"MaxBackoff": ".01s",
"BackoffMultiplier": 1.0,
// this value is grpc code
"RetryableStatusCodes": [ "UNAVAILABLE" ]
}
}]
}`
Providing the retry policy as a DialOption
To use the above service config, pass it with grpc.WithDefaultServiceConfig to
grpc.Dial.
conn, err := grpc.Dial(ctx,grpc.WithInsecure(), grpc.WithDefaultServiceConfig(retryPolicy))