Hystrix执行模式

sme*_*eeb 8 java asynchronous fault-tolerance reactive-programming hystrix

我试图围绕Hystrix,并在阅读他们的文档之后,仍然对其使用模式有疑问.

首先,我不明白的用例时候使用他们的异步执行与自己执行.我能看到的唯一区别是异步执行始终是非阻塞的,而Reactive可以是阻塞的或非阻塞的.所以我想我真正的问题是:

  • 同步和阻止反应执行有什么区别?和
  • 异步和非阻塞反应执行之间有什么区别?

ahu*_*us1 21

假设您已将两个服务调用A和B包装为HystrixCommand.您现在有三个选择:

用法.execute():纯同步调用.一旦结果到达,您调用该方法并继续您的程序.你的程序的总执行时间是两个调用的总和.程序的主要流程是非常线性的.

使用.queue():Future立即接收两个命令.两个服务调用都是并行执行的.然后.get()用来检索结果.这些调用带有阻塞,直到结果存在.您的总执行时间比以前更快:您的执行时间将是最长服务呼叫的长度.当你想要结合两种服务的结果时使用它.虽然两个调用都是并行执行的,但程序的主流仍然是线性的.

使用.subscribe():Observable立即接收两个命令.两个服务调用都是并行执行的.然后使用.subscribe()注册回调以在结果可用时对其执行操作.如果您不想将结果组合在一起并希望在服务A和B到达后对服务A和B的结果做出独立反应,那么这非常有用.程序的主流程不是线性的,而是反应的:程序的流程将在每个命令的回调内继续.

我希望它有所帮助.