1. Interpreting a Service Registration
Every service registration file or API call includes several fields that tell Consul how to manage your service:- ID: A unique identifier (defaults to the service name if not set).
- Name: Logical service name used for discovery.
- Tags: Custom labels for grouping or routing.
- Port: Listening port of your service.
- Address: Optional IP address (otherwise uses the agent’s IP).
- Checks: Health check definitions (see next section).
A well-structured registration makes automated tooling and monitoring far easier to implement.
2. Registering a Service
You have three primary options to register a new service:| Method | Description | Example |
|---|---|---|
| HTTP API | Send a PUT request to the local Consul agent. | curl --request PUT --data @svc.json http://localhost:8500/v1/agent/service/register |
| Config Directory File | Drop a JSON or HCL file into /etc/consul.d/ and reload the agent. | /etc/consul.d/my-service.hcl then consul reload |
| Direct CLI Config Reference | Point the agent to a specific file and trigger a reload. | consul agent -config-file=/path/to/service.json |
After adding or modifying a file in the config directory, always run
consul reload to apply changes without downtime.3. Adding Health Checks
Health checks ensure Consul only routes traffic to healthy instances. Common check types:- HTTP
- TCP
- Script
4. Querying the Service Catalog
Verify your services and their health status using:| Interface | Command / Query | Notes |
|---|---|---|
| DNS | dig @127.0.0.1 -p 8600 web.service.consul SRV | Native DNS lookup for service discovery |
| HTTP API | curl http://localhost:8500/v1/catalog/service/web | Detailed JSON output, including node info |
| Web UI | Browse http://localhost:8500/ui/services | Interactive view of all registered services |
5. Prepared Queries & Failover
Prepared queries let you define advanced routing and failover rules:- Create a Prepared Query
- Define Failover Strategy
Include multiple service pools with weights or priorities. - Execute via API or DNS
- HTTP:
GET /v1/query/{query_id}/execute - DNS:
dig @127.0.0.1 -p 8600 {query_name}.query.consul SRV
- HTTP: