Introduction
Go gRPC client fails to connect when the server is not listening on the specified address. This guide provides step-by-step diagnosis and resolution with specific commands and code examples.
Symptoms
Typical symptoms and error messages when this issue occurs:
rpc error: code = Unavailable desc = connection refused
grpc: failed to dialObservable indicators: - Application logs show connection or operation failures - Error messages appear in system or application logs - Related dependent services may exhibit cascading failures
Common Causes
- 1.The issue is typically caused by:
- 2.Incorrect configuration parameters
- 3.Missing or outdated dependencies
- 4.Resource exhaustion or timeout settings
Step-by-Step Fix
Step 1: Check Current State
grpc_health_probe -addr=localhost:50051Step 2: Identify Root Cause
netstat -tlnp | grep 50051Step 3: Apply Primary Fix
// Primary fix: update configuration
cfg := Config{
Timeout: 30 * time.Second,
MaxRetry: 3,
LogLevel: "info",
}Apply this configuration and restart the application:
go build && ./applicationStep 4: Apply Alternative Fix (If Needed)
// Alternative fix: use context with timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
result, err := operation.WithContext(ctx)After applying this configuration, verify the connection pool behavior under load testing.
Step 5: Verify the Fix
After applying the fix, verify with:
go test -v ./... && go buildExpected output should show successful operation without errors.
Common Pitfalls
- Forgetting to close response bodies
- Setting MaxIdleConnsPerHost too low
- Not handling connection errors gracefully
Best Practices
- Read official documentation first
- Test in isolated environment
- Document changes for team visibility
Related Issues
- Go Module Version Mismatch
- Go Build Constraints Not Applied
- Go Cross Compilation Failed