我在Java Web應用程序中擁有分層體系結構。 UI層只是Java,服務是類型化的Akka actors和外部服務調用(WS,DB等)被包裝在Hystrix命令中。如何使用Akka actors處理Java未來
用戶界面調用該服務,服務返回Akka未來。這是一個Akka的未來,因爲我想通過Akka期貨提供的onComplete和onFailure回調來簡化UI編碼。然後該服務創建一個未來,執行一些映射等,並將調用包裝爲一個返回Java未來的HystrixCommand。
在僞所以:
UI
AkkaFuture future = service.getSomeData();
服務
public AkkaFuture getSomeData() {
return future {
JavaFuture future = new HystrixCommand(mapSomeData()).queue()
//what to do here, currently just return future.get()
}
}
的問題是,我想騰出服務男主角使用線程,只是領帶了解Hystrix使用的線程。但Java未來阻止了這一點,因爲我必須阻止它的完成。我能想到的唯一選擇(我不確定我喜歡)是不斷調查Java未來,並在Java未來完成時完成Akka未來。
注意:這個問題與Hystrix本身並沒有真正的關係,但是如果有人提出了一個與Hystrix特別相關的解決方案,我決定提一提。