2016-03-23 15 views
1

bir ThrowableStrategy a:Akka Streams'de hataya sebep olan nesne nasıl alınır? eşleştiren bir decider tanımlayarak akışı yetmezliği işleyebilir <a href="http://doc.akka.io/docs/akka/2.4.2/scala/stream/stream-error.html" rel="nofollow">akka streams docs</a> biri uyarınca

val decider: Supervision.Decider = { 
    case _: ArithmeticException => Supervision.Resume 
    case _      => Supervision.Stop 
} 

da hataya neden elemana erişmek için bir yol olup olmadığını merak ediyorum. Tabii ki, bu elementin türü bilinmemektedir, ancak Object'un bir örneği olarak bile almanın bir yolu var mı?

+1

Bir istisna varsa, öğe yoktur. İstisnalar akış elemanlarından değil, koddan kaynaklanır. Kaynak.single (yeni özel durum()) 'nı bir "hata öğesi" ne olurdu? –

+0

Bu doğrudur, ancak bir "Akım [Int, Int, ...]" varsa, boru hattından akan “Int” ler vardır ve akış içinde istisnaya neden olan öğeye ulaşmam gerekir. – Mihai238

+1

@GiovanniCaporaletti yedekliyorum. "Hatalar" temelde "hatalardan" farklıdır - eğer akışınız bazı özel grafikler için başarısız olursa (örneğin, '42' rakamını sevmezse), sorunlu sahneyi "try-catch" ile kaplayabilir ve orada inceleyebilirsiniz; Hangi aşamada sorun yaratacağını öğrenmek için 'Throwable' yığın izini görebilirsiniz. Diğer taraftan, bir 'Arıza', tüm şeyin uçurulduğu ve genellikle tek bir öğeye bağlı olmadığı (dışsal bağımlılık kazası, bellek yetersizliği, vs.) –

cevap

0

önemsiz yolu atılır yere yakın ArithmeticException yakalamak ve mesajda soruna neden int basacaktır özel istisna MyDetailedArithmeticException(culprit: Int) atmak olacaktır.