- K8s deployment (2 replicas, PVC, initContainer для server_name) - Streams definitions (MM_ONLINE, MM_OFFLINE, MM_WRITE, MM_EVENTS) - Job payload schema (JSON v1 з idempotency) - Worker contract (capabilities + ack/retry) - Init streams script - Оновлено ARCHITECTURE-150-NODES.md (Control-plane vs Data-plane) TODO: Auth (nkeys), 3+ replicas для prod, worker-daemon implementation
96 lines
2.6 KiB
Bash
Executable File
96 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Ініціалізація NATS JetStream streams для Memory Module
|
|
# Використання: ./init-streams.sh <nats-url>
|
|
|
|
set -e
|
|
|
|
NATS_URL=${1:-"nats://nats-client.nats:4222"}
|
|
|
|
echo "🚀 Ініціалізація NATS JetStream streams..."
|
|
echo "NATS URL: $NATS_URL"
|
|
|
|
# Перевірка доступності NATS
|
|
if ! nats --server="$NATS_URL" server check jetstream 2>/dev/null; then
|
|
echo "❌ NATS JetStream не доступний. Перевірте deployment."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Створення Stream MM_ONLINE ==="
|
|
nats --server="$NATS_URL" stream add MM_ONLINE \
|
|
--subjects="mm.embed.online,mm.retrieve.online,mm.summarize.online" \
|
|
--storage=file \
|
|
--replicas=3 \
|
|
--max-age=30m \
|
|
--max-deliver=3 \
|
|
--ack \
|
|
--discard=old \
|
|
--duplicate-window=5m \
|
|
--retention=limits
|
|
|
|
echo ""
|
|
echo "=== Створення Stream MM_OFFLINE ==="
|
|
nats --server="$NATS_URL" stream add MM_OFFLINE \
|
|
--subjects="mm.embed.offline,mm.index.offline,mm.backfill.offline" \
|
|
--storage=file \
|
|
--replicas=3 \
|
|
--max-age=7d \
|
|
--max-deliver=10 \
|
|
--ack \
|
|
--discard=old \
|
|
--retention=limits
|
|
|
|
echo ""
|
|
echo "=== Створення Stream MM_WRITE ==="
|
|
nats --server="$NATS_URL" stream add MM_WRITE \
|
|
--subjects="mm.qdrant.upsert,mm.pg.write,mm.neo4j.write" \
|
|
--storage=file \
|
|
--replicas=3 \
|
|
--max-age=7d \
|
|
--max-deliver=10 \
|
|
--ack \
|
|
--discard=old \
|
|
--retention=limits
|
|
|
|
echo ""
|
|
echo "=== Створення Stream MM_EVENTS ==="
|
|
nats --server="$NATS_URL" stream add MM_EVENTS \
|
|
--subjects="mm.event.audit,mm.event.status" \
|
|
--storage=file \
|
|
--replicas=3 \
|
|
--max-age=30d \
|
|
--ack \
|
|
--discard=old \
|
|
--retention=limits
|
|
|
|
echo ""
|
|
echo "=== Створення Consumer online-worker-tier-a ==="
|
|
nats --server="$NATS_URL" consumer add MM_ONLINE online-worker-tier-a \
|
|
--durable=online-worker-tier-a \
|
|
--ack=explicit \
|
|
--ack-wait=30s \
|
|
--max-ack-pending=5000 \
|
|
--filter="mm.embed.online" \
|
|
--deliver=all \
|
|
--max-deliver=3 \
|
|
--backoff=1s,5s,30s
|
|
|
|
echo ""
|
|
echo "=== Створення Consumer offline-worker-tier-b ==="
|
|
nats --server="$NATS_URL" consumer add MM_OFFLINE offline-worker-tier-b \
|
|
--durable=offline-worker-tier-b \
|
|
--ack=explicit \
|
|
--ack-wait=5m \
|
|
--max-ack-pending=10000 \
|
|
--filter="mm.embed.offline" \
|
|
--deliver=all \
|
|
--max-deliver=10 \
|
|
--backoff=10s,1m,5m,30m
|
|
|
|
echo ""
|
|
echo "=== Перевірка streams ==="
|
|
nats --server="$NATS_URL" stream ls
|
|
|
|
echo ""
|
|
echo "✅ Streams створено успішно!"
|