Hystrix执行模式

9

我正试图理解Hystrix,在阅读了他们的文档之后,仍然有一个有关使用模式的问题。

首先,我不明白何时使用它们的异步执行和反应式执行的用例。我唯一能看到的区别是异步执行始终是非阻塞的,而反应式执行可以是阻塞或非阻塞的。所以我想知道的真正问题是:

  • 同步和阻塞反应式执行之间的区别是什么?;以及
  • 异步和非阻塞反应式执行之间的区别是什么?
1个回答

22
假设您已将两个服务调用 A 和 B 包装为一个 HystrixCommand。现在有三种选择:
使用.execute():纯同步调用。您调用该方法并在结果到达后继续执行程序。您的程序的总执行时间是两个调用的总和。您的程序的主要流程非常线性。
使用.queue():立即为两个命令接收Future。两个服务调用都会并行执行。然后使用.get()来检索结果。这些调用会阻塞直到结果出现。总执行时间比以前更快:您的执行时间将是最长服务调用的长度。当您想要组合两个服务的结果时,请使用此选项。尽管两个调用是并行执行的,但您的程序的主要流程仍然是线性的。
使用.subscribe():立即为两个命令接收Observable。两个服务调用都会并行执行。然后使用.subscribe()来注册回调以在结果可用时对其进行操作。如果您不想组合结果并且希望独立地对服务A和B的结果做出反应,则此选项非常有用。 您的程序的主要流程不是线性的,而是具有响应性:程序的流程将在每个命令的回调内部继续。
希望能对您有所帮助。

请问您能否解释一下maxQueueSize属性https://github.com/Netflix/Hystrix/wiki/Configuration#ThreadPool。 我根据文档的理解是,当您指定此属性时,用于从调用线程传递到Hystrix线程池中的其中一个线程的队列的大小将为maxQueueSize? 如果是这样,如果我将此值指定得足够大,是否应该永远不会收到RejectedExecutionException异常? - timpham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接