Ara katman yazılımı API hatalarını giderme

Çoğu ara katman yazılımı API'si SdvResult nesnesi döndürür. Başarılı olursa bu nesne, beklenen sonuç nesnesini içerir. Başarısızlık durumunda bu nesne, genellikle Internal, Unavailable veya DataLoss gibi bir hata koduyla tanımlanan, beklenmedik bir davranışı veya hata durumunu gösteren bir SdvStatus nesnesi içerir.

Bu sayfa, bu hata kodlarıyla ilgili sorunları gidermenize yardımcı olur.

Kayıt ve oluşturma hatalarını giderme

Kayıt ve oluşturma hataları genellikle geçersiz bir hizmet oluşturmaya veya kaydetmeye çalıştığınızda ortaya çıkar.

İkinci hizmet oluşturulamıyor

Hata:

Internal hatası.

Neden:

Tam olarak aynı hizmet paketi örneğini (ad ve örnek kimliği) iki kez kaydettirmeye çalışıyorsunuz.

Düzeltme:

Aynı hizmet paketi örneğini (ad ve örnek kimliği) iki kez kaydettirmeye çalışmayın.

Yinelenen hizmet paketi silinemiyor

Hata:

Status(-3, EX_ILLEGAL_ARGUMENT)

Neden:

Mevcut olmayan yinelenen bir hizmet paketini silmeye çalışıyorsunuz.

Düzeltme:

Mevcut olmayan yinelenen bir hizmet paketini silmeye çalışmayın.

Mesaj göndermek için yayıncı örneği alınamıyor

Hata:

take_publisher() numaralı telefona yapılan arama none değerini döndürüyor.

Neden:

Aynı hizmet paketi örneğindeki aynı varyant için take_publisher()'ı iki kez aradınız.

Düzeltme:

Aynı hizmet paketi örneğindeki aynı varyant için take_publisher() işlevini iki kez çağırmayın.

Abone, Gözlemci, Geçmiş veya InstantReader oluşturamama

Hata:

Unavailable hatası.

Neden:

Var olmayan veya kaydı silinmiş bir yayıncı için Subscriber, Observer, History veya InstantReader oluşturmaya çalıştınız.

Düzeltme:

Yayıncı için Subscriber, Observer, History veya InstantReader oluşturmaya çalışmadan önce yayıncının var olduğunu ya da kayıtlı olduğunu doğrulayın.

RPC istemcisi oluşturulamıyor

Hata:

Unavailable hata

Neden:

Olmayan veya kayıtlı olmayan bir sunucu birimi adı için RPC istemcisi oluşturmaya çalıştınız.

Düzeltme:

RPC istemcisini oluşturmadan önce sunucunun mevcut olduğunu ve kayıtlı olduğunu doğrulayın.

İletişim hatalarını giderme

İletişim hataları, bir hizmet yürütüldükten ve diğer hizmetlerle iletişim kurmaya başladıktan sonra ortaya çıkabilir.

Yayıncı kaydını silme sorunlarını giderme

Yayıncı, okuyucuları hala aktifken kaydını silerse hatalar oluşabilir.

Abone read_next_messages() boş listeler döndürüyor

Hata:

read_next_messages() başarılı oluyor ancak boş listeler döndürüyor.

Neden:

Yayıncı, okuyucuları aktifken kaydı siliniyor.

Düzeltme:

Kullanılabilirlik akışına sahip bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncının kaydı silinir ve yeni mesaj olmaz.

Observer'ın next() işlevi dahili hata döndürüyor

Hata:

next() iade Internal hatası.

Neden:

Yayıncı, okuyucuları aktifken kaydı siliniyor.

Düzeltme:

Kullanılabilirlik akışına sahip bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncı ayrılmış demektir ve yeni mesaj yoktur.

Geçmişin read_from_history() işlevi yeni mesajları döndürmüyor

Hata:

read_from_history() yeni iletileri döndürmez, yalnızca eski iletileri döndürür.

Neden:

Yayıncı, okuyucuları aktifken kaydı siliniyor.

Düzeltme:

Kullanılabilirlik akışına sahip bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncı ayrılmış demektir ve yeni mesaj yoktur.

InstantReader read_latest_message() dahili hata döndürüyor

Hata:

read_latest_message() iade Internal hatası.

Neden:

Yayıncı, okuyucuları aktifken kaydı siliniyor.

Düzeltme:

Kullanılabilirlik akışına sahip bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncı ayrılmış demektir ve yeni mesaj yoktur.

Boş ileti sırasıyla ilgili sorunları giderme

Boş bir mesaj kuyruğundan okuma yapılmaya çalışılırken hatalar oluşabilir.

Abone read_next_messages() boş liste döndürüyor

Hata:

read_next_messages() başarıyla boş liste döndürüyor.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Stok durumu akışıyla abone veya geçmiş kullanın. Stok durumu akışının son mesajı varsa yayıncı aktiftir ve yeni mesaj yoktur.

Observer'ın next() işlevi dahili hata döndürüyor

Hata:

next() iade Internal hatası.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Stok durumu akışıyla abone veya geçmiş kullanın. Stok durumu akışının son mesajı varsa yayıncı aktiftir ve yeni mesaj yoktur.

Geçmişin read_from_history() işlevi yeni mesajları döndürmüyor

Hata:

read_from_history() başarıyla boş liste döndürüyor.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Stok durumu akışıyla abone veya geçmiş kullanın. Stok durumu akışının son mesajı varsa yayıncı aktiftir ve yeni mesaj yoktur.

InstantReader read_latest_message() dahili hata döndürüyor

Hata:

read_latest_message() iade Internal hatası.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Stok durumu akışıyla abone veya geçmiş kullanın. Stok durumu akışının son mesajı varsa yayıncı aktiftir ve yeni mesaj yoktur.

Arabellek taşması veya veri kaybıyla ilgili sorunları giderme

Yayıncı, okuyucunun tüketebileceğinden daha hızlı bir şekilde mesaj gönderdiğinde hatalar oluşabilir.

Taşma döndükten sonra abonenin ilk okuması DataLoss hatası veriyor

Hata:

read_next_message() iade DataLoss hatası.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı bir şekilde mesaj gönderiyor.

Düzeltme:

Taşmadan sonraki ilk Observer.next() DataLoss hatası döndürüyor

Hata:

next() iade DataLoss hatası.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı bir şekilde mesaj gönderiyor.

Düzeltme: Olası düzeltmeler şunlardır:

  • Yayıncı daha yavaş bir hızda yayınlar. Örneğin, en son mesajın zaman damgasını içeren bir değişkeniniz olabilir. Geçerli saat, en son yayınlanma zamanı artı bir delta değerinden küçükse mesajı yayınlamazsınız. Bu mekanizma kullanıldığında, delta başına en fazla bir mesaj yayınlanır.

  • Tüketici, gözlemci yerine InstantRead nesnesi kullanıyor. Bir InstantRead nesnesi taşma hatası döndürmez ve her zaman son mesajı döndürür. Sizin için önemli olan tek mesaj son mesajsa gözlemci yerine InstantRead nesnesi kullanabilirsiniz.

  • Tüketici, örneklemeyi uygular. Çözümünüzde, mesajları gözlemciden (01) daha hızlı yayınlayan bir yayıncı (P1) varsa yayınlama ve okuma hızındaki farkı karşılamak için yeni bir yayıncı (P2) ve gözlemci (02) oluşturabilirsiniz.

    Örneğin, P1'in her 10 ms'de bir mesaj yayınladığını ancak O1'in her 100 ms'de yalnızca bir mesaj okuyabildiğini ve kalan dokuz mesajı bıraktığını varsayalım. Uyuşmazlığı gidermek için aşağıdaki adımları uygulayarak bir çözüm oluşturun:

    1. P1, O2'ye mesaj yayınlar.
    2. O2, bir mesajı okuyor ve dokuzunu bırakıyor.
    3. O2, okunan mesajı P2'ye gönderir.
    4. P2, okundu mesajını O1'e gönderir.
    5. O1, her on saniyede bir mesaj okur.

    Aşağıdaki örnek kodda bu örnekleme senaryosunun nasıl uygulanacağı gösterilmektedir:

    int discarded_message = 10;
    
    while (true) {
    message m = O2.read_message();
    if discarded_message == 10 {
      discarded_message = 0;
      P2.publish(m);
    } else {
     discarded_message ++;
    }
    }
    

Geçmişteki okumalar eksik

Hata:

İleti, geçmiş kopyalanmadan önce kayboluyor. Okunduğunda doğrudan hata bildirimi yok.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı bir şekilde mesaj gönderiyor.

Düzeltme:

InstantReader yalnızca son mesajı okuyor

Hata:

İleti, geçmiş kopyalanmadan önce kayboluyor. Okunduğunda doğrudan hata bildirimi yok.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı bir şekilde mesaj gönderiyor.

Düzeltme:

Yok

UPÇ istemcisi bir yöntemi çağırıyor ve yöntem kullanılamıyor

Hata:

Yöntem çağrısı Unavailable hatasıyla başarısız oluyor.

Neden:

SDV, sunucu adını bilmiyor ve Unavailable döndürüyor. Bu hata, hizmet keşfi geçerli bir sunucu adı döndürmezse ara yazılım tarafından döndürülür.

Düzeltme:

İstemcinin kullanmak istediği arayüz için server tanımlayan bir hizmet paketi başlatın.

Sunucu tarafı uygulama, SdvStatus hatası döndürüyor

Hata:

Sunucu tarafı uygulama, SdvResult içeren bir SdvStatus döndürür. Örneğin, SdvStatusCode::NotFound. Hata, çağıran istemciye geri gönderilir.

Neden:

SDV ve istemci ile sunucu arasındaki iletişim sistemi beklendiği gibi çalışıyor ancak istemci, sunucuda hataya neden olan bir istekte bulundu.

Düzeltme:

İstemciyle geçerli bir istekte bulunun veya sunucuyu bu isteklere başarıyla yanıt verecek şekilde düzeltin.