Some checks failed
CI/CD Pipeline / Generate SBOM (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
CI/CD Pipeline / Policy Validation (push) Has been cancelled
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-firm-connectors) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-forms) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-hmrc) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ingestion) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-normalize-map) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ocr) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-indexer) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-reason) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rpa) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (ui-review) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (ui-review) (push) Has been cancelled
CI/CD Pipeline / Notifications (push) Has been cancelled
8.1 KiB
8.1 KiB
NATS Docker Compose Integration Summary
Overview
Successfully integrated NATS.io message broker with JetStream support into the AI Tax Agent's Docker Compose infrastructure. The NATS service is now available alongside other infrastructure services like Redis, PostgreSQL, and Neo4j.
Changes Made
1. Added NATS Service to Docker Compose
File: infra/compose/compose.yaml
NATS Service Configuration:
nats:
image: nats:2.10-alpine
container_name: nats
restart: unless-stopped
networks:
- backend
ports:
- "4222:4222" # NATS client connections
- "8222:8222" # HTTP monitoring
- "6222:6222" # Cluster routing (for future clustering)
volumes:
- nats_data:/data
command: >
--jetstream
--store_dir=/data
--http_port=8222
--max_file_store=10GB
--max_mem_store=1GB
environment:
NATS_LOG_LEVEL: ${NATS_LOG_LEVEL:-info}
healthcheck:
test:
[
"CMD",
"wget",
"--no-verbose",
"--tries=1",
"--spider",
"http://localhost:8222/healthz",
]
interval: 30s
timeout: 10s
retries: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.nats-monitor.rule=Host(`nats.${DOMAIN:-local}`)"
- "traefik.http.routers.nats-monitor.entrypoints=websecure"
- "traefik.http.routers.nats-monitor.tls=true"
- "traefik.http.routers.nats-monitor.middlewares=authentik-forwardauth@file"
- "traefik.http.services.nats-monitor.loadbalancer.server.port=8222"
Key Features:
- JetStream Enabled: Persistent messaging with file-based storage
- Monitoring: HTTP monitoring interface on port 8222
- Cluster Ready: Port 6222 configured for future clustering
- Health Checks: Automated health monitoring
- Traefik Integration: Web UI accessible at
https://nats.local - Storage Limits: 10GB file storage, 1GB memory storage
2. Added NATS Volume
Added nats_data: volume to the volumes section for persistent storage.
3. Updated All Application Services
Updated 13 application services to include NATS configuration:
Services Updated:
svc-ingestionsvc-extractsvc-kgsvc-rag-retrieversvc-coveragesvc-firm-connectorssvc-formssvc-hmrcsvc-normalize-mapsvc-ocrsvc-rag-indexersvc-reasonsvc-rpa
Environment Variables Added to Each Service:
environment:
# ... existing variables ...
- NATS_SERVERS=${NATS_SERVERS:-nats://nats:4222}
- NATS_STREAM_NAME=${NATS_STREAM_NAME:-TAX_AGENT_EVENTS}
- NATS_CONSUMER_GROUP=${NATS_CONSUMER_GROUP:-tax-agent}
depends_on:
# ... existing dependencies ...
- nats
4. Updated Environment Configuration
File: infra/compose/env.example
Added NATS configuration variables:
# Event Bus Configuration
EVENT_BUS_TYPE=memory
KAFKA_BOOTSTRAP_SERVERS=
# NATS Configuration
NATS_SERVERS=nats://nats:4222
NATS_STREAM_NAME=TAX_AGENT_EVENTS
NATS_CONSUMER_GROUP=tax-agent
NATS_LOG_LEVEL=info
Usage
Starting the Stack
# Navigate to compose directory
cd infra/compose
# Copy environment file
cp env.example .env
# Start all services including NATS
docker compose up -d
# Check NATS status
docker compose logs nats
Using NATS in Applications
Option 1: Environment Variable Configuration
Set EVENT_BUS_TYPE=nats in your environment to use NATS instead of memory/kafka.
Option 2: Direct Configuration
from libs.events import create_event_bus
# Use environment variables (recommended)
bus = create_event_bus(
"nats",
servers=os.getenv("NATS_SERVERS", "nats://nats:4222"),
stream_name=os.getenv("NATS_STREAM_NAME", "TAX_AGENT_EVENTS"),
consumer_group=os.getenv("NATS_CONSUMER_GROUP", "tax-agent")
)
# Or direct configuration
bus = create_event_bus(
"nats",
servers="nats://nats:4222",
stream_name="TAX_AGENT_EVENTS",
consumer_group="tax-agent"
)
Accessing NATS Monitoring
- URL:
https://nats.local(requires Authentik authentication) - Direct Access:
http://localhost:8222(when running locally) - Health Check:
http://localhost:8222/healthz
NATS CLI Access
# Install NATS CLI
go install github.com/nats-io/natscli/nats@latest
# Connect to NATS server
nats --server=nats://localhost:4222 server info
# List streams
nats --server=nats://localhost:4222 stream list
# Monitor stream
nats --server=nats://localhost:4222 stream info TAX_AGENT_EVENTS
Configuration Options
Environment Variables
| Variable | Default | Description |
|---|---|---|
NATS_SERVERS |
nats://nats:4222 |
NATS server connection string |
NATS_STREAM_NAME |
TAX_AGENT_EVENTS |
JetStream stream name |
NATS_CONSUMER_GROUP |
tax-agent |
Consumer group name |
NATS_LOG_LEVEL |
info |
NATS server log level |
EVENT_BUS_TYPE |
memory |
Event bus type (memory/kafka/nats) |
NATS Server Configuration
The NATS server is configured with:
- JetStream: Enabled for persistent messaging
- File Storage: 10GB maximum
- Memory Storage: 1GB maximum
- Data Directory:
/data(persistent volume) - Monitoring: HTTP interface on port 8222
Network Architecture
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Application │───▶│ NATS │◀───│ Application │
│ Services │ │ (4222) │ │ Services │
│ │ │ │ │ │
│ svc-ingestion │ │ JetStream │ │ svc-extract │
│ svc-kg │ │ Enabled │ │ svc-rag-* │
│ svc-forms │ │ │ │ svc-reason │
│ ... │ │ │ │ ... │
└─────────────────┘ └──────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ Monitoring │
│ (8222) │
│ │
│ https://nats.local│
└──────────────────┘
Benefits
1. High Performance
- Very low latency messaging
- High throughput with minimal overhead
- Efficient binary protocol
2. Operational Simplicity
- Single binary deployment
- Minimal configuration required
- Built-in monitoring and health checks
3. Reliability
- JetStream provides persistence
- Automatic message acknowledgment
- Configurable retry policies
4. Scalability
- Ready for clustering (port 6222 configured)
- Horizontal scaling support
- Load balancing across consumers
5. Integration
- Seamless integration with existing services
- Traefik routing for web UI
- Authentik authentication for monitoring
Next Steps
-
Test the Integration:
# Start the stack docker compose up -d # Check NATS is running docker compose ps nats # View NATS logs docker compose logs nats -
Switch to NATS:
# Update environment echo "EVENT_BUS_TYPE=nats" >> .env # Restart services docker compose restart -
Monitor Usage:
- Access monitoring at
https://nats.local - Use NATS CLI for detailed monitoring
- Check application logs for event processing
- Access monitoring at
-
Production Deployment:
- Configure NATS clustering for high availability
- Set up proper authentication and TLS
- Configure monitoring and alerting
- Tune storage and memory limits based on usage
The NATS integration is now complete and ready for use across all AI Tax Agent services!