【问题标题】:Hystrix: Doing network call in getFallBack()Hystrix:在 getFallBack() 中进行网络调用
【发布时间】:2015-09-06 16:28:19
【问题描述】:

我一直在使用 Netflix OSS Hystrix,现在我正在探索不同的配置和可能性,以将其包含在我的项目中。除其他外,我的应用程序需要在HystrixCommand.getFallBack() 中进行网络调用...

现在,我读到最好不要在那里进行网络调用,而是提供一些通用答案(请参阅Hystrix Wiki),如果确实有必要这样做,应该使用HystrixCommand 或@987654324 @。

我的问题是,如果我使用 HystrixCommand,我应该使用 HystrixCommand.run()HysrixCommand.queue() 或其他选项来调用它吗?

另外,在我的日志中,我注意到getFallBack() 可以有不同的调用线程(例如,Hystrix-Timer,我想这取决于谁中断了 run 方法)。在这里,我想知道从回退调用HystrixCommand.run() 的shell 如何影响我的性能,因为调用线程将处于活动状态并被阻塞,直到该命令完成?

编辑:以全新的眼光看待这个问题,我现在认为“通用答案”(上面提到的)可能是某种形式的 Promise,即 Java 术语中的 CompletableFuture<T>。因此,从HystrixCommand.run() 返回承诺将允许调用线程(Hystrix 内部)立即返回,从而释放它。但是现在我坚持实施这种行为。有任何想法吗?

非常感谢您的帮助!

【问题讨论】:

    标签: promise future fallback netflix hystrix


    【解决方案1】:

    使用 HystrixCommand 的执行方法。示例:

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

    如果您想使用异步“承诺”,那么您可能应该实现一个 HystrixObservableCommand。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2017-03-24
      • 2014-06-08
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多