2013-09-24 85 views
5

Đây là những gì tôi đang tìm và cuộc sống của tôi tôi không thể điều hướng đến lý do. Tôi đang tạo ra các "máy in" diễn viên mà về cơ bản hoặc là không làm gì, hoặc in một tin nhắn dựa trên loại tin nhắn mà họ nhận được."Chữ cái chết gặp phải" ngay sau khi diễn viên được đặt vào bộ định tuyến

class Printer extends Actor { 
    def receive = { 
     case m: SomeMessage => println(m.text) 
     case _ => 
    } 
} 

tôi là tạo ra một số các diễn viên:

val actor4 = system.actorOf(Props[Printer], "t-4") 
val actor5 = system.actorOf(Props[Printer], "t-5") 
val actor6 = system.actorOf(Props[Printer], "t-6") 

và ném chúng vào một vectơ:

val routees2 = Vector[ActorRef](actor4, actor5, actor6) 

tôi đang làm ở trên để tôi có thể ném chúng vào một bộ định tuyến (và chúng sẽ nằm dưới sự kiểm soát của bộ định tuyến). Khi tôi chạy spec đến thời điểm này tôi không có bất kỳ vấn đề. Ngay sau khi tôi đặt chúng trong một bộ định tuyến và chạy spec tôi đang gặp vấn đề. Dưới đây là các bộ định tuyến:

val router = system.actorOf(Props[Printer].withRouter(
    BroadcastRouter(routees = routees2)), "router-to-transformers") 

Bây giờ khi tôi chạy spec tôi có tất cả các loại chữ chết ...

[INFO] [09/23/2013 17:10:21.468] [spider-akka.actor.default-dispatcher-6] [akka://spider/user/router-to-transformers] Message [akka.dispatch.sysmsg.DeathWatchNotification] from Actor[akka://spider/user/router-to-transformers#-1845250548] to Actor[akka://spider/user/rout 
er-to-transformers#-1845250548] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
[INFO] [09/23/2013 17:10:21.468] [spider-akka.actor.default-dispatcher-6] [akka://spider/user/router-to-transformers] Message [akka.dispatch.sysmsg.DeathWatchNotification] from Actor[akka://spider/user/router-to-transformers#-1845250548] to Actor[akka://spider/user/rout 
er-to-transformers#-1845250548] was not delivered. [2] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
[INFO] [09/23/2013 17:10:21.468] [spider-akka.actor.default-dispatcher-6] [akka://spider/user/router-to-transformers] Message [akka.dispatch.sysmsg.DeathWatchNotification] from Actor[akka://spider/user/router-to-transformers#-1845250548] to Actor[akka://spider/user/rout 
er-to-transformers#-1845250548] was not delivered. [3] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 

Đối với cuộc sống của tôi, tôi không thể tìm ra những gì đang xảy ra ở đây . Tôi đã thêm một liên kết vào một đoạn thử nghiệm. Việc đánh số, trong đoạn mã, là lạ vì tôi đã cắt một loạt các nỗ lực khác nhau đã được nhận xét để không lộn xộn đoạn mã. Tôi đang tập trung vào vấn đề này dead-chữ vì tôi cảm thấy giống như khi tôi đã thêm một diễn viên hơn và thực sự bắt đầu đi qua các thông điệp xung quanh, mọi thứ đã không nhận được giao ... http://snipt.org/AhVf0

Nó có giá trị gọi ra rằng những diễn viên là địa phương. Tôi đã đọc một cái gì đó về actorFor được khấu hao và tôi tự hỏi nếu điều đó đang được sử dụng và là một phần những gì đang gây ra vấn đề của tôi? Có rất nhiều bộ phận chuyển động ở đây mặc dù và không có nhiều tài liệu ổn định, COMPREHENSIVE. Mọi sự trợ giúp sẽ rất được trân trọng.

Trả lời

7

Những gì bạn thấy ở đây là DeathWatchNotifications không được xử lý, có nghĩa là diễn viên (Bộ định tuyến) vẫn đang xem con của nó khi nó chấm dứt. Đây không phải là dấu hiệu của sự cố as documented (nhưng chúng ta nên làm rõ hơn trong trường hợp của thông điệp cụ thể này). Trong trường hợp này, cách duy nhất để loại bỏ thông điệp này là đảm bảo rằng bộ định tuyến và các thường trình không chấm dứt "cùng một lúc".

+1

Thay vì sử dụng: 'Router val = system.actorOf (Props (CreateDiagnostic) .withRouter (BroadcastRouter (routees = routees2)), "router") 'cú pháp tôi chuyển sang:' val router = system.actorOf (Đạo cụ (createDiagnostic) .withRouter (BroadcastRouter (nrOfInstances = 3)), "bộ định tuyến") 'làm cho cái chết -các bản tin biến mất. Tôi giả định thực hiện thứ hai này là cách sạch hơn để làm điều đó? Như mọi khi, cảm ơn. – MCP

3

Tôi gặp vấn đề tương tự với dự án akka của mình. Đây là câu hỏi của tôi "Dead Letters encountered" error while running AKKA remote actors

Thông thường, chữ cái chết gặp phải xảy ra khi không có thêm nhân viên công nhân nào nhận được thư do chủ gửi. Bạn nên đảm bảo rằng nhân viên công nhân của bạn vẫn còn hoạt động khi chủ nhân của bạn gửi một tác vụ hoặc tin nhắn.

1

Một giải pháp là sử dụng Scheduler, và thay vì

context.stop(self) 

sử dụng:

system.scheduler.scheduleOnce(1 second) { 
    self ! PoisonPill 
}