2012-05-10 19 views
6

Tôi đang xây dựng một cái gì đó tương tự (nhưng không giống hệt) với mẫu yêu cầu ở Akka, nơi tôi cần phải khởi tạo một diễn viên tạm thời xử lý một thông điệp duy nhất và sau đó tự sát. Tôi đã thực hiện quy trình làm việc cơ bản bằng cách sử dụng actorOf() một lần cho mỗi yêu cầu, nhưng điều này không cảm thấy hoàn toàn đúng, vì nó sẽ đăng ký một diễn viên mới tại một đường dẫn mới mỗi lần.Tôi làm cách nào để kích hoạt một diễn viên tạm thời ở Akka?

Cách thích hợp để thực hiện việc này là gì?

+3

Tại sao bạn cần một diễn viên nếu nó chỉ là một lần duy nhất? chỉ cần sử dụng một tương lai? Tương lai ({process (msg)}) (context.dispatcher) pipeTo someOtherActor –

+0

Trong ngữ cảnh, tôi cần nó là một diễn viên để tôi có thể chuyển nó như người gửi đến một diễn viên khác. Tuy nhiên, vấn đề lớn hơn có thể là thiết kế đòi hỏi điều này. – SoftMemes

Trả lời

5

Có vẻ như bạn cần sử dụng future. Theo như tôi hiểu, Akka tương lai chăm sóc việc tạo ra diễn viên & xử lý cho bạn; nếu bạn flatMap một số tương lai với nhau, bạn sẽ nhận thấy rằng một số thực thi trong cùng một diễn viên, trong khi đối với những người khác, một cái mới được tạo ra. Để không biết xấu hổ tài liệu hướng dẫn:

import akka.japi.Function; 
import java.util.concurrent.Callable; 
import akka.dispatch.Futures; 
import akka.dispatch.OnComplete; 

Future<String> f = Futures.future(new Callable<String>() { 
    public String call() { 
    return "Hello" + "World"; 
    } 
}, system.dispatcher()).andThen(new OnComplete<String>() { 
    public void onComplete(Throwable err, String result) { 
     // do something with the err and/or result 
    } 
    }); 
}); 

Tôi đoán điều gì đó như trên có thể đủ? Hãy xem tài liệu để biết thêm ví dụ ...

@ viktor-clang có thể biết cách khác, nhưng tôi không nghĩ bạn nên đặc biệt lo lắng về số lượng diễn viên sinh ra trong trường hợp chung; chúng rẻ hơn nhiều so với các luồng hệ điều hành.

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