Tôi có một diễn viên nhận thư, tìm kiếm hệ thống tệp cho tệp và trả về đường dẫn đầy đủ của Tệp.người gửi bên trong tương lai
Để giữ cho nó không đồng bộ, tôi đã thực hiện:
def receive ={
case s:String => {
val f = future{
val ans = search(s)
println("Input Request: "+s+" output:"+ans+" "+sender.path)
}
f.onComplete{
case Success(x) => sender ! x
case Failure(y) => println("Could not complete it")
}
}
Nhưng tôi đã quan sát thấy rằng nó sẽ trả về thông điệp tới akka://FileSystem/deadLetters
và không phải là sender
. Tài liệu nói rằng:
Chỉ hợp lệ trong chính diễn viên, vì vậy đừng đóng nó và * xuất bản lên các chủ đề khác!
Vì vậy, có nghĩa là, tôi sẽ nhất thiết phải đồng bộ hóa nó? Còn cách nào khác không?
Tại sao sử dụng một tương lai? Đó là một hoạt động I/O (và do đó có thể chặn), do đó, hãy đặt diễn viên vào bộ điều phối chặn-io. Nếu bạn cần tìm kiếm nhiều tệp cùng một lúc, hãy chạy nhiều phiên bản. –