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))