This example shows how to enable and configure retry on gRPC clients.
gRFC for client-side retry support
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:
go run client/main.go
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"}],
"retryPolicy": {
"MaxAttempts": 4,
"InitialBackoff": ".01s",
"MaxBackoff": ".01s",
"BackoffMultiplier": 1.0,
// this value is grpc code
"RetryableStatusCodes": [ "UNAVAILABLE" ]
}
}]
}`
To use the above service config, pass it with grpc.WithDefaultServiceConfig
to
grpc.NewClient
.
conn, err := grpc.NewClient(ctx,grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithDefaultServiceConfig(retryPolicy))