读了《Spring Cloud 微服务实战》第151-154页, 总结如下:

Hystrix存在两种Command,一种是HystrixCommand,另一种是HystrixObservableCommand。

对于HystrixCommand,有四种执行方式:

1、同步执行:execute,同步,直接返回结果,该方式有注解方式的实现

    @HystrixCommand
public String helloService(){
return restTemplate.getForEntity("http://hello-service/hello",String.class).getBody();
}

2、异步执行:queue,异步,返回Future,直到调用Future的get方法时,才会阻塞,直获取结果,在那之前都是在异步执行的,该方式有注解方式的实现

    @HystrixCommand
public Future<String> queueService(){
return new AsyncResult<String>(){
public String invoke(){
return restTemplate.getForEntity("http://hello-service/hello",String.class).getBody();
}
};
}

以上两种,返回值不同,注意观察。

3、异步执行,直到订阅时发射返回结果:observe该方式未找到注解方式的实现

4、同步执行,直到订阅才开始执行,然后发射返回结果:toObservable该方式未找到注解方式的实现

以上3和4,因为只能发射一次,所以不如使用HystrixObservableCommand,可以发射多次,并且有注解方式的实现,可替代上方

1、HystrixObservableCommand的 observe 和  toObservable

    @HystrixCommand(fallbackMethod = "helloFallback",
observableExecutionMode = ObservableExecutionMode.EAGER//observe方式
/*,observableExecutionMode = ObservableExecutionMode.LAZY toObservable方式*/
/*,ignoreExceptions = {Exception.class} 定义忽略异常,则遇到该类异常将不再执行fallback方法,直接包装后抛出*/
)
//用的是注解写的是HystrixCommand,其实实现的是HystrixObservableCommand,因此支持自定义多次发射
public Observable<String> obserableService(){
return Observable.create(new Observable.OnSubscribe<String>(){
public void call(Subscriber<? super String> observer){
try{
            //这里不需加判断,可以删掉判断
if(!observer.isUnsubscribed()){
String result = restTemplate.getForEntity("http://hello-service/hello",String.class).getBody();
observer.onNext(result);
//可以写多个onNext,发射多次
observer.onNext(result);
observer.onCompleted();
}
}catch (Exception e){
observer.onError(e);
}
}
});
//在方法外边调用subscribe方法
}

所谓“发射”,大家可以理解为 使用回调方法,发射多次,意味着可以多次调用回调方法,比如:

1、如果返回了一个List,我们又想把List里的每个对象都处理一下

2、再或者我们的实现里调用了多个服务,可以每个服务的结果都处理一下

等。。。

读书笔记——spring cloud 中 HystrixCommand的四种执行方式简述的更多相关文章

  1. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出“欢迎下次光临” 在网页中弹出框输入1   网页输出“查询中……” 在 ...

  2. Spring中bean的四种注入方式

    一.前言   最近在复习Spring的相关内容,这篇博客就来记录一下Spring为bean的属性注入值的四种方式.这篇博客主要讲解在xml文件中,如何为bean的属性注入值,最后也会简单提一下使用注解 ...

  3. Android中Activity的四种启动方式

    谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...

  4. Spring AOP 中 advice 的四种类型 before after throwing advice around

    spring  AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...

  5. Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...

  6. XML解析——Java中XML的四种解析方式

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...

  7. 页面中CSS的四种引入方式的介绍与比较

    转自:https://blog.csdn.net/qq_38689666/article/details/79039392 一:行内式 <p style="color:red" ...

  8. XML解析——Java中XML的四种解析方式(转载 by 龍清扬)

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...

  9. Java中XML的四种解析方式(一)

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析的方式都是一样的,只不过实现的语法不同而已. XML文档以层级标签的 ...

随机推荐

  1. Intellij IDEA打开就闪退或关闭

    找到idea安装目录的bin目录,搜索vmoptions可以看到两个文件, idea.exe.vmoptions idea64.exe.vmoptions 1 这两个文件就是IDEA的一些配置文件,带 ...

  2. LSTM简介以及数学推导(FULL BPTT)

    http://blog.csdn.net/a635661820/article/details/45390671 前段时间看了一些关于LSTM方面的论文,一直准备记录一下学习过程的,因为其他事儿,一直 ...

  3. 条件随机场 (CRF) 分词序列谈之一(转)

    http://langiner.blog.51cto.com/1989264/379166 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...

  4. -webkit-margin-before

    原文:https://www.cnblogs.com/guyw/p/4369653.html ----------------------------------------------- -webk ...

  5. vim的查找与替换

    http://harttle.land/2016/08/08/vim-search-in-file.html

  6. linux性能分析工具集(图示)

  7. SharePoint CAML Query小结

    CAML的结构. <View Type="HTML" Name="Summary"> <ViewBody ExpandXML="TR ...

  8. JavaScript判断变量是否为数组的方法(Array)

    废话不多说直接上一个代码: 1.这里是通用的检测方法 /* * 判断是否是数组 */ function isArray(obj){ return Object.prototype.toString.c ...

  9. PC 微信扫码登陆

    目录 1.注册微信开发平台 2.微信开发平台添加网站应用 3.PC微信登录流程介绍 4.获取用户基本信息(UnionID机制) 1.注册微信开发平台 官网网址 自行注册,需要注意的是注册邮箱号不用与腾 ...

  10. [Canvas]游戏增加怪物爆炸效果,改善箭头形状

    请点此下载代码并用浏览器打开试玩. 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-eq ...