Server log kayıtlarını sorunlu (boş array) ve sorunusuz response alma durumuna göre inceledim, inceleme sonucunu sizlerle paylaşıyorum.
Bu testte, tcpdump çıktısında (saat 13:03:48) şunları görüyoruz:
backend'denlivekit'e giden isteğin kendisi:13:03:48.096833 IP localhost.42468 > localhost.pss: Flags [P.]... POST /twirp/livekit.SIP/ListSIPOutboundTrunk HTTP/1.1 Host: livekit.enmdigital.com ...livekit'tenbackend'e dönen cevap:13:03:48.098763 IP localhost.pss > localhost.42468: Flags [P.]... HTTP/1.1 200 OK Content-Length: 270 ... .ST_b8qNuJrPXL3d..908504809295."{ "tenantKey": "CeyberDigital" }"...- Aynı anda (
13:03:48.098Z),livekitloglarınastatus: "200"kaydı düşüyor.
Anlamı: Sunucu yapılandırması (Caddy, extra_hosts, appsettings.json) ** çalışıyor**. backend, livekit'e ulaşıyor ve livekit cevap veriyor.
Bu testte, tcpdump çıktısı (saat 13:02:13 - 13:03:10 arası) sadece anlamsız TCP "keep-alive" paketleri gösteriyor.
En Önemli Bulgu:
Bu çıktıda backend'den livekit'e giden POST /twirp/livekit.SIP/ListSIPOutboundTrunk isteğinin HİÇ OLMADIĞINI görüyoruz.
Aynı anda livekit logları da sessiz kalıyor, çünkü ona hiçbir istek gelmiyor.
Bu tcpdump çıktısına göre sorun backend'de görünüyor.
Boş [] array yanıtı aldığımızda, backend (ID: 1444d709f4a8) livekit'e (ID: a1757d4b69ff) hiçbir network isteği göndermiyor.
Yapay zekaya danışınca aldğım cevap: Bu durum "Caching (Önbellekleme)" sorunu.
backenduygulamasılivekit'e bir istek atıyor.- O an
livekit(belki anlık bir yavaşlama yaşıyor)status: 200ama boş[]array döndürüyor. backenduygulamanız bu "başarılı ama boş" yanıtı alıyor ve bunu kendi iç cache'ine (önbellek) kaydediyor. (Buna "Cache Poisoning" denir).- Siz bir sonraki isteği attığınızda (
Boş Aldığımsenaryosu),backenduygulamanızlivekit'e sormaya gerek duymuyor. Doğrudan kendi cache'inden size boş[]array'i veriyor. backend'denlivekit'e bir istek hiç gitmediği için,tcpdumpvelivekitlogları da doğal olarak tamamen sessiz kalıyor.- Sizin eklediğiniz
try-catchbloğu da tetiklenmiyor, çünkü kodda birException(hata) oluşmuyor; kod sadece "başarıyla" cache'den veri okuyor.
Çözüm backend kodunu güncellemektir.
Backendde GetOutboundTrunksAsync metodunu, livekit'ten boş [] array yanıtı aldığında bunu cache'lemeyecek şekilde güncellemek gerekiyor.
Önerdiğim çözüm (boş liste geldiğinde Exception fırlatmak) bu "cache zehirlenmesini" engelleyecektir:
if (filteredOutboundTrunks.Count == 0 && response.Items.Count == 0)
{
// Cache'lemeyi önlemek için bir hata fırlat
throw new Exception("LiveKit servisi 'ListSIPOutboundTrunk' için boş bir liste döndürdü. Bu anlık bir sorun olabilir.");
}Bu kod değişikliğini yapıp (veya cache mekanizmasını tamamen devre dışı bırakıp) backend'i yeniden canlıya almanız gerekiyor.