Skip to main content

Egress Servisi

Egress Servisi, Cınga verilerini dış sistemlere kontrollü biçimde aktarır.

Sorumluluk

  • Egress policy’ye göre event seçmek
  • Dış sistem formatına map/transform yapmak
  • Güvenli outbound gönderim yapmak
  • Retry/DLQ yönetmek
  • Outbound audit log tutmak
  • Partner bazlı rate-limit ve tenant izolasyonu uygulamak

Girdiler

  • window.ready.v1
  • rule.triggered.v1
  • heartbeat.status.changed.v1
  • (opsiyonel) blockchain.committed.v1

Çıktılar

  • egress.sent.v1
  • egress.failed.v1
  • cinga.dlq.egress

Akış

Veri Modeli

egress_policies

KolonTipNot
idbigint PK
namevarchar(100)
source_eventvarchar(64)
target_typevarchar(32)webhook/api/mq
target_urltext
methodvarchar(8)POST/PUT
headers_templatejsonb
transform_templatejsonb
signing_profile_idbigintopsiyonel
rate_limit_per_minintegerpolicy bazlı
enabledboolean
created_at, updated_attimestamptz

egress_deliveries

KolonTipNot
idbigint PK
policy_idbigint FK
source_eventvarchar(64)
source_trace_idvarchar(128)
target_urltext
statusvarchar(16)sent/failed/dlq
http_statusinteger
retry_countinteger
request_body_hashvarchar(128)
response_excerpttextkısaltılmış
sent_attimestamptz
created_at, updated_attimestamptz

Topic ve Event Standardı

  • Topic:
    • cinga.egress.sent
    • cinga.egress.failed
    • cinga.dlq.egress
  • Event:
    • egress.sent.v1
    • egress.failed.v1

Not: Event payload standardı arşiv referansı: /projects/cinga/backend/architecture/event-envelope.

Event Örnekleri

egress.sent.v1

{
"event": "egress.sent.v1",
"meta": {
"schema_version": 1,
"trace_id": "eg-9f3f...",
"producer_service": "egress-service",
"produced_at": "2026-03-12T21:30:10.100Z",
"process_ms": 38
},
"context": {
"device_id": "400000011D081B70",
"stream_id": 9823412
},
"data": {
"policy_id": 7,
"target_type": "webhook",
"target_url": "https://partner.example.com/iot",
"http_status": 200,
"retry_count": 0,
"request_body_hash": "sha256:ab12..."
},
"error": null
}

egress.failed.v1

{
"event": "egress.failed.v1",
"meta": {
"schema_version": 1,
"trace_id": "eg-9f3f...",
"producer_service": "egress-service",
"produced_at": "2026-03-12T21:30:12.300Z",
"process_ms": 52
},
"context": {
"device_id": "400000011D081B70",
"stream_id": 9823412
},
"data": {
"policy_id": 7,
"target_type": "webhook",
"target_url": "https://partner.example.com/iot",
"retry_count": 3
},
"error": {
"failed_stage": "egress_delivery",
"error_code": "EGRESS_HTTP_TIMEOUT",
"error_message": "partner endpoint timeout",
"retryable": false,
"failed_at": "2026-03-12T21:30:12Z"
}
}

Retry / DLQ Politikası

  • Backoff: 1s, 5s, 15s
  • Max retry: 3
  • Non-retryable hatalar doğrudan DLQ
  • DLQ replay yalnız admin onayı ile

Güvenlik

  • Outbound allowlist zorunlu
  • mTLS/API key desteği
  • Payload signing (opsiyonel)
  • Hassas alanlar outbound öncesi maskeleme politikasıyla yönetilir

SLO (Öneri)

MetrikHedef
p95 egress latency< 800ms
delivery success rate> 99%
dlq_rate< 0.5%
policy transform fail rate< 0.2%

Çıktı

  • Dış sistem entegrasyon katmanı