HystrixCommand vs HystrixObservableCommand
来源:互联网 发布:行为监控软件 编辑:程序博客网 时间:2024/06/03 22:06
要想使用hystrix,只需要继承HystrixCommand或HystrixObservableCommand,简单用法见上面例子。两者主要区别是:
- 前者的命令逻辑写在run();后者的命令逻辑写在construct()
- 前者的run()是由新创建的线程执行;后者的construct()是由调用程序线程执行
- 前者一个实例只能向调用程序发送(emit)单条数据,比如上面例子中run()只能返回一个String结果;后者一个实例可以顺序发送多条数据,比如demo中顺序调用多个onNext(),便实现了向调用程序发送多条数据,甚至还能发送一个范围的数据集,下面举例说明
public class ObservableCommandNumbersToWords extends HystrixObservableCommand<ObservableCommandNumbersToWords.NumberWord>{ private final List<Integer> numbers; // in the real world you'd probably want to replace this very simple code by using ICU or similar static Map<Integer, String> dict = new HashMap<Integer, String>(11); static { dict.put(0, "zero"); dict.put(1, "one"); dict.put(2, "two"); dict.put(3, "three"); dict.put(4, "four"); dict.put(5, "five"); dict.put(6, "six"); dict.put(7, "seven"); dict.put(8, "eight"); dict.put(9, "nine"); dict.put(10, "ten"); } public ObservableCommandNumbersToWords(final List<Integer> numbers) { super(HystrixCommandGroupKey.Factory.asKey("hoho") ); this.numbers = numbers; } protected Observable<NumberWord> construct() { System.out.println("construct! thread:" + Thread.currentThread().getName()); return Observable.from(numbers).map(new Func1<Integer, NumberWord>() { public NumberWord call(final Integer number) { System.out.println("call! thread:" + Thread.currentThread().getName()); return new NumberWord(number, dict.get(number)); } }); } static class NumberWord { private final Integer number; private final String word; public NumberWord(final Integer number, final String word) { super(); this.number = number; this.word = word; } public Integer getNumber() { return number; } public String getWord() { return word; } } public static void main(String[] args) throws Exception{ List<Integer> in = new LinkedList<Integer>(); in.add(2); in.add(3); Observable<NumberWord> hotObservable = new ObservableCommandNumbersToWords(in).observe(); hotObservable.subscribe(new Observer<NumberWord>() { // 先执行onNext再执行onCompleted // @Override public void onCompleted() { System.out.println("hotObservable of ObservableCommand completed"); } // @Override public void onError(Throwable e) { System.out.println("hotObservable of ObservableCommand error"); e.printStackTrace(); } // @Override public void onNext(NumberWord v) { System.out.println("hotObservable of ObservableCommand onNext: " + v.getWord()); } }); }
运行结果是:
construct! thread:main
call! thread:main
call! thread:main
hotObservable of ObservableCommand onNext: two
hotObservable of ObservableCommand onNext: three
hotObservable of ObservableCommand completed
阅读全文
1 0
- HystrixCommand vs HystrixObservableCommand
- Hystrix系列-2-HystrixObservableCommand的使用
- 通过继承HystrixCommand来创建请求命令遇到的问题
- 将HystrixCommand通过Observable来实现响应式执行方式
- Spring cloud系列十 使用@HystrixCommand使用Hystrix组件及@EnableCircuitBreaker原理介绍
- > VS >
- VS
- vs
- vs
- &&VS&
- VS
- vs
- VS
- VS
- VIM vs VS:关公战秦琼
- 【VS Hacks】定制VS
- Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison
- Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison
- Retrofit实现请求WebService 看这篇就够了。
- Oracle 创建限制用户
- VirtualBox搭建局域网(静态IP)
- Linux强制卸载内核模块(由于驱动异常导致rmmod不能卸载)
- 51nod 1525 重组公司
- HystrixCommand vs HystrixObservableCommand
- 常用sql
- 嵌入式Linux驱动笔记(四)------USB键盘驱动程序
- 八皇后 拉斯维加斯算法
- STM32的I/O口的八种工作模式
- 南阳理工acm 116士兵杀敌(二)(线段树)
- 单例模式编写详解
- Good Softwares and Tools
- oracle 12C数据库PSU补丁安装