2011-11-10 17 views
5

OOM'dan kaçınmak için, bazı Akka 1.1.3 aktörlerimin posta kutusu boyutunu paylaşılan bir özel dağıtım görevlisi ile sınırlandırıyorum. Örneğin: (: actor.stop(), bekle gibi ne yazık ki görünüyor ve actor.start() bir ActorStartException atacağım yan notu) İsterdim Aktar aktör sınırlı posta kutusu MessageQueueAppendFailedException

object Static { 
    val dispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher(
     "customDispatcher", 
     1000, 
     BoundedMailbox(capacity = 10) 
    ) 
} 

class MyActor extends Actor { 
    self.dispatcher = Static.dispatcher 
    ... 
} 

yüzden mesajı memba üreticilerin duraklatma yapabilirsiniz taşan posta kutusuna tepki. Kuyruk doldurma ve kuyruk boşaltma kuyruğu arasında bazı veri kaybı kabul edilebilir.

Dispatchers tarihinde Akka en bölüm mesajı içinde posta kutusuna ilave edilemezse (“BlockingMessageTransferQueue transferi zaman aşımına uğradı”)

bir MessageQueueAppendFailedException atacağım Actor bir mesaj göndermeye çalışırken diyor pushTimeout tarafından belirtilen süre.

Bu özel durumu nereden alabilirim?

Dokümantasyon, her myActor ! message'u bir deneme/yakalamaya sarmam gerektiği gibi ses çıkarır. Bu doğru mu? Onun kullanımını merkezileştirmeyi çok isterim. Supervisor'um belki de onu engelleyebilir ve işleyicimi çalıştırabilir mi?

+0

Bunu denetlemenin amacı nedir? –

+0

Bunun özel durumunuza uygulanıp uygulanmayacağından emin değilsiniz, ancak posta kutularını taşırken risk altında olduğunuz durumlarda karşılaşıyorsanız, tüketici oyuncularınızın üreticiden ziyade bir üreticiden iş istediği "çekme" tasarımını düşünebilirsiniz. Tüketicilerinizi spam etmek. –

+0

@Viktor, özellikle tüketicileri duraklatmak için akış yönündeki eylemi üstlenecek (bunu soruya ekleyeceğim). Dan haklı ve kesinlikle çekme modelini düşüneceğim. Ancak şu an bunu yapmak istiyorum, küçük bir rearchitecting ile, ve veri kaybı kabul edilebilir. – Bluu

cevap

0

cc.spray.json._ kullanmayı deneyin, çünkü akka'nın veya twitter'ın çöplüğünün üzerine yerleştirilmiştir.