lilydocs
HTTP APIWebSocketConsumer
Yayın3 dk okuma

Dağıtık backplane ve Redis

Aynı uygulamanın birden fazla node’unda canlı yayın taşıyın; Required/Optional ve readiness davranışlarını belirleyin.

Backplane, local client hedeflerini diğer node'lara taşır. lily_websocket_redis online Redis Pub/Sub adapter'ıdır. Oda ve principal üyelikleri kendi node'larının connection manager'larında kalır.

Adapter’ı açıkça seçin#

İlk uygulamanın lilyrs satırını aşağıdaki feature listesiyle güncelleyin. websocket-redis yalnız adapter'ı açar; server modülü için websocket de seçilir. Cache'in redis feature'ı ayrı bir ihtiyaçtır.

Cargo.toml bağımlılığı
lilyrs = { version = "0.1.0", features = ["websocket", "websocket-redis"] }
Builder parçası
use lilyrs::websocket::{BackplaneRequirement, WsAppBuilder};
use lilyrs::websocket_redis::RedisWebSocketBackplane;

let builder = WsAppBuilder::default()
    .backplane::<RedisWebSocketBackplane>(BackplaneRequirement::Required);

Bu builder'ı normal build/start akışında kullanın. Yalnız config eklemek backplane'i etkinleştirmez. App başına tek backplane seçilir. Adapter kendi publisher/subscriber bağlantılarını yönetir; lily_redis pool'unu paylaşmaz.

Config#

lily.toml — production bağlantı şablonu
[websocket.backplane]
redis_url = "${secret:websocket.redis_url}"
use_tls = true
application_namespace = "orders-api"
environment_namespace = "production"
channel_namespace = "events"
publish_capacity = 64
ingress_capacity = 256
connection_timeout_millis = 5000
operation_timeout_millis = 2000
reconnect_initial_delay_millis = 100
reconnect_max_delay_millis = 5000
reconnect_jitter_ratio = 0.2

Secret placeholder gerçek SecretResolver tarafından çözülmelidir. Production doğrulaması credential içeren rediss:// ve TLS ister. custom_ca_bundle kullanırsanız canonical absolute PEM dosya yoludur; custom CA mevcut public trust köklerine eklenmez, bağlantının köklerini değiştirir.

Required ve Optional#

Durum Sonuç
Adapter yok Local dispatch
Required constructor başarısız Build başarısız
Optional constructor başarısız Gözlenebilir degraded local-only app
Required çalışma sırasında kesildi Readiness düşer; mevcut socket loop'ları sırf bundan kapanmaz
Publisher ve ilk subscription sağlıklı Backplane'in required readiness koşulu sağlanır
Local send sonrası publish başarısız Local etkiler kalır; hata local raporu taşır
Bilinen kesintide yeni publish Başarısız; reconnect sonrası replay yok

Application health'in diğer required kontrolleri ayrıca sağlanmalıdır. Observability snapshot'ı kendi probe endpoint'inize bağlamayı açıklar.

Protokol ve genişletme#

Channel yapısı lily.websocket.v4.<environment>.<application>.<channel> kullanır. Backplane routing generation v4 ile client envelope v2 farklı katmanlardır. Aynı deployment node'ları aynı generation ve namespace ayarlarını kullanmalıdır.

WebSocketBackplane custom adapter için opaque taşıma SPI'sıdır; adapter routing zarfını kendisi yeniden üretmez. Bounded publish/ingress, health ve close sözleşmesini uygular. Duplicate/origin-loop suppression sınırlıdır; sonsuz geçmişte exactly-once garantisi vermez.

Teslim ve kapasite sınırı#

Redis publish kabulü uzak istemci teslimi değildir. Offline inbox, kalıcı history, replay, kesin global sıra veya uzak alıcı ACK toplamı yoktur. Receipt yalnız kendi tanımlı acceptance eşiklerini gösterir.

Native Redis Cluster/Sentinel discovery bulunmaz; HA için kararlı endpoint sağlamak deployment işidir. Redis client bulk payload'ı adapter admission'dan önce decode edebilir; güvenilmeyen Redis publisher'a karşı allocation öncesi tam bellek sınırı iddiası yapılmaz. Queue sınırları toplam process belleğini tek başına sınırlamaz.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod