Are you tired of race conditions in your deployment pipelines? Ever run into those pesky "connection refused" errors when your application starts before its dependencies? Today I'll introduce you to Wait4X's TCP checker - a powerful tool for ensuring your services are ready before your application tries to connect.
What is Wait4X?
Wait4X is a lightweight, zero-dependency tool designed to wait for services to be ready before continuing. It's a Swiss Army knife for service readiness checks, supporting multiple protocols and integrations including TCP, HTTP, DNS, and various databases.
The TCP Checker: Simple Yet Powerful
At its core, the TCP checker does one thing extremely well: it attempts to establish a TCP connection to a specified address and port. If the connection succeeds, the service is considered ready; if it fails, Wait4X will retry based on your configuration.
Basic Usage
The simplest way to use Wait4X's TCP checker is:
wait4x tcp localhost:3306
This command will attempt to connect to MySQL running on the default port, retrying until it succeeds or times out.
Advanced Options
Wait4X offers several options to fine-tune TCP checking behavior:
-
Connection timeout: Specify how long to wait for each connection attempt
wait4x tcp localhost:8080 --connection-timeout 5s
-
Retry interval: Control how frequently to retry
wait4x tcp localhost:8080 --interval 2s
-
Exponential backoff: Use smarter retry strategies
wait4x tcp localhost:8080 --backoff-policy exponential --backoff-exponential-coefficient 2.0
-
Multiple endpoints: Check multiple services in parallel
wait4x tcp localhost:3306 localhost:6379 localhost:27017
-
Reverse checking: Wait for a port to become free
wait4x tcp localhost:8080 --invert-check
Real-world Use Cases
Docker Compose Orchestration
When working with Docker Compose, you often have dependencies between services. Using Wait4X, you can ensure services start in the right order:
services:
db:
image: postgres:13
ports:
- "5432:5432"
# ...
api:
build: ./api
# ...
depends_on:
- db
command: sh -c "wait4x tcp db:5432 && npm start"
CI/CD Pipelines
In CI/CD pipelines, Wait4X ensures tests don't run until services are ready:
# Start services
docker-compose up -d
# Wait for services to be ready
wait4x tcp localhost:3306 localhost:6379
# Run tests
npm test
Kubernetes Init Containers
Wait4X is perfect for Kubernetes init containers:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
# ...
template:
spec:
initContainers:
- name: wait-for-db
image: wait4x/wait4x:latest
command: [ "wait4x", "tcp", "postgres-service:5432", "--timeout", "60s" ]
containers:
- name: app
image: my-app:latest
# ...
Using Wait4X as a Go Package
For Go developers, Wait4X provides a clean API:
// Create a context with timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
// Create a TCP checker
tcpChecker := tcp.New("localhost:6379", tcp.WithTimeout(5*time.Second))
// Wait for the TCP port to be available
err := waiter.WaitContext(
ctx,
tcpChecker,
waiter.WithTimeout(time.Minute),
waiter.WithInterval(2*time.Second),
waiter.WithBackoffPolicy("exponential"),
)
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
fmt.Println("Service is ready!")
How it Works Under the Hood
Wait4X's TCP checker uses Go's net.Dialer.DialContext to attempt TCP connections with configurable timeouts. It handles various error cases intelligently, distinguishing between connection refusals, timeouts, and other network issues.
The exponential backoff strategy progressively increases the interval between retries, reducing unnecessary connection attempts while still responding quickly when services become available.
Conclusion
Wait4X's TCP checker solves a common but critical challenge in modern infrastructure: ensuring services are actually ready before dependent applications attempt to connect. By providing a simple, reliable way to check TCP connectivity, Wait4X helps eliminate race conditions, reduce errors, and make your deployments more robust.
Give Wait4X a try in your next project - your deployment pipelines will thank you!
What service readiness problems have you encountered in your infrastructure? Share your experiences in the comments!
Top comments (0)