我正试图围绕Hystrix进行思考,在阅读了他们的文档后,仍然对其使用模式有疑问。
一方面,我不了解何时使用异步执行与反应式执行的用例。我能看到的唯一区别是异步执行始终是非阻塞的,而 Reactive 既可以是阻塞的,也可以是非阻塞的。所以我想我真正的问题是:
- 同步和阻塞响应式执行有什么区别?和
- 异步和非阻塞响应式执行有什么区别?
我正试图围绕Hystrix进行思考,在阅读了他们的文档后,仍然对其使用模式有疑问。
一方面,我不了解何时使用异步执行与反应式执行的用例。我能看到的唯一区别是异步执行始终是非阻塞的,而 Reactive 既可以是阻塞的,也可以是非阻塞的。所以我想我真正的问题是:
假设您已将两个服务调用 A 和 B 包装为HystrixCommand
. 您现在有三个选择:
使用.execute()
:纯同步调用。一旦结果到达,您调用该方法并继续您的程序。您的程序的总执行时间是两个调用的总和。您的程序的主要流程是非常线性的。
使用.queue()
:立即收到Future
两个命令。两个服务调用并行执行。然后用于.get()
检索结果。这些调用与阻塞,直到结果在那里。您的总执行时间比以前更快:您的执行时间将是最长服务调用的长度。当您想要合并两个服务的结果时使用它。尽管两个调用是并行执行的,但程序的主要流程仍然是线性的。
使用.subscribe()
:立即收到Observable
两个命令。两个服务调用并行执行。然后用于.subscribe()
注册回调以在结果可用时对其进行操作。如果您不想合并结果并希望在服务 A 和 B 的结果到达后独立地做出反应,这将非常有用。程序的主要流程不是线性的,而是反应式的:程序流程将在每个命令的回调中继续。
我希望它有所帮助。