# 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 go run server/main.go ``` Then run the client: ```bash 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. ```go 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`. ```go conn, err := grpc.Dial(ctx,grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithDefaultServiceConfig(retryPolicy)) ```