读书笔记——spring cloud 中 HystrixCommand的四种执行方式简述
读了《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的四种执行方式简述的更多相关文章
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出“欢迎下次光临” 在网页中弹出框输入1 网页输出“查询中……” 在 ...
- Spring中bean的四种注入方式
一.前言 最近在复习Spring的相关内容,这篇博客就来记录一下Spring为bean的属性注入值的四种方式.这篇博客主要讲解在xml文件中,如何为bean的属性注入值,最后也会简单提一下使用注解 ...
- Android中Activity的四种启动方式
谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...
- Spring AOP 中 advice 的四种类型 before after throwing advice around
spring AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...
- Javascript中函数的四种调用方式
一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...
- XML解析——Java中XML的四种解析方式
XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...
- 页面中CSS的四种引入方式的介绍与比较
转自:https://blog.csdn.net/qq_38689666/article/details/79039392 一:行内式 <p style="color:red" ...
- XML解析——Java中XML的四种解析方式(转载 by 龍清扬)
XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...
- Java中XML的四种解析方式(一)
XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析的方式都是一样的,只不过实现的语法不同而已. XML文档以层级标签的 ...
随机推荐
- linux上安装wps办公软件
在rhel6.3上安装 金山WPS rpm包时,容易出现出现错误wps Requires: libstdc++.so.6(GLIBCXX_3.4.14).即使安装成功,也不能够使用,只是缺少了一个li ...
- go语言之进阶篇创建goroutine协程
1.goroutine是什么 goroutine是Go并行设计的核心.goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现 ...
- query多选下拉框插件 jquery-multiselect(修改)
其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介 ...
- 0mq 入门 (转)
最近做后台发现很多地方需要队列,我用东西一般有两个要求: 1) 够傻够简单. 2) 有源码,能看又能改. 最后相中了0mq,下面介绍如何安装和写个简单的例子.一. linux平台: ...
- 使用MDS Switch基本命令的一个例子
笔者有幸摆弄一套vBlock的环境, 刚刚接手, 对其上的很多配置都不了解. 下面我们就例举一下我们通过运行哪些命令来搞清楚我们的UCS是如何连接到VNX storage array上的. 首先, 通 ...
- 最小二乘法多项式曲线拟合原理与实现 zz
概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...
- RAMPS1.4 3d打印控制板接线与测试1
1.需要下载的软件 1.1 固件上传工具--Arduino IDE 这是上传固件的必备工具,有了这个软件让上传固件变的容易很多,插上USB,就可以轻松上传. 下载地址:windows版本:http:/ ...
- SqlServer驱动包 Maven
SqlServer驱动包 Maven 学习了:https://blog.csdn.net/wu843820873/article/details/50484623 mvn install: mvn i ...
- 转:android root tcpdump抓包强烈推荐
转:http://www.cnblogs.com/findyou/p/3491035.html 写的相当详细且完整,业界良心. adb push d:\tcpdump /data/local/ adb ...
- 【指导】SonarQube 部署说明
转载:https://blog.csdn.net/cuiaamay/article/details/52057091 1,安装 1.1 安装依赖 需要保证Oracle JRE 8 及以上,或者 Ope ...