2015-06-20 65 views
1

我一直在玩Netflix OSS Hystrix,我正在探索不同的配置和可能性,以將其包含在我的項目中。除此之外,我的應用程序需要在HystrixCommand.getFallBack()中執行網絡調用...Hystrix:在getFallBack中進行網絡調用()

現在,確實需要這樣做,應該使用HystrixCommandHystrixObservableCommand

我的問題是,如果我使用HystrixCommand我應該調用它,例如,與HystrixCommand.run()HysrixCommand.queue()或其他一些選項?

此外,在我的日誌中,我注意到getFallBack()可以有不同的調用線程(例如,Hystrix-Timer,我猜這取決於誰中斷了運行方法)。在這裏,我想知道如何從fallback調用HystrixCommand.run()影響我的性能,因爲調用線程將一直處於活動狀態並被阻塞,直到該命令結束爲止?

編輯:用這個問題的新眼光,我現在認爲「通用答案」(上面提到的)可以是某種形式的Promise,即用Java術語的CompletableFuture<T>。因此,返回HystrixCommand.run()的承諾將允許調用線程(Hystrix內部)立即返回,從而釋放它。但是現在我堅持實施這種行爲。有任何想法嗎?

非常感謝您的幫助!

回答

0

使用HystrixCommand的execute方法。例如:

@Override 
protected YourReturnType getFallback() { 
    return new MyHystrixFallbackCommand().execute(); 
} 

如果你想與異步「承諾」的工作,那麼你或許應該實現一個HystrixObservableCommand。