2013-08-08 31 views
5

Trường hợp sử dụng của tôi rất đơn giản - trao đổi vài (< 100) thông điệp giữa hai đối tượng, diễn viên Scala là tuyệt vời cho mục đích này (trọng lượng nhẹ, quản lý vòng đời không phức tạp, bắt đầu/chấm dứt bất cứ lúc nào).Có bất kỳ diễn viên trọng lượng nhẹ nào trong Akka không?

Bây giờ tôi đang chuyển từ diễn viên Scala sang Akka, tuy nhiên tôi không thể tìm thấy những diễn viên có trọng lượng nhẹ đó nữa!

Với Akka, không chỉ tôi cần tạo ActorSystem/Props để tạo diễn viên, mà còn cần phải chăm sóc vòng đời của ActorSystem.

Có diễn viên Akka không yêu cầu quản lý chu trình sống ActorSystem phức tạp không?

Trả lời

5

Bạn có thể tạo mặc định của riêng mình ActorSystem trong đối tượng đơn lẻ toàn cầu và bạn không phải dừng thủ công - nó sẽ dừng khi tắt chương trình.

UPD

Xem answer bởi Roland Kuhn cho giải pháp làm thế nào để ngăn chặn ActorSystem từ giữ JVM từ tắt.

object global { 
    import com.typesafe.config.ConfigFactory 
    // From answer by Roland Kuhn 
    implicit lazy val actorSystem: ActorSystem = 
    ActorSystem("default", ConfigFactory.parseString("akka.daemonic=on")) 
} 

Bạn có thể sử dụng package object cho mục đích đó.

Bạn cũng có thể sử dụng ActorDSL cho cú pháp tạo diễn viên nhẹ:

import ActorDSL._ 
import global._ 

val a = actor(new Act { 
    become { 
     case msg => ... 
    } 
}) 
4

diễn viên là các đơn vị chế biến tích cực, vì thế họ cần phải đóng cửa khi không còn cần thiết. Bạn có thể tạo vòng đời của ActorSystem bằng cách thiết lập akka.daemonic=on, có nghĩa là nó sẽ không giữ JVM ngừng hoạt động, nhưng nó cũng có nghĩa là bạn đảm bảo rằng các tác nhân được thực hiện với công việc của họ khi chương trình chính của bạn quay trở lại.

+0

Cảm ơn bạn rất nhiều vì đã có thêm thông tin! –

Các vấn đề liên quan