命令执行
toObservable:同样会返回Observable对象,也代表了操作的多个结果,但他返回的是一个ColdObservable.
observer:返回Observable对象,他代表了操作的多个结果,他是一个HotObservable.
queue:异步执行,直接返回一个Future对象,其中包含了服务执行结束时要返回的单一结果对象。
execute:同步执行,从依赖的服务返回一个单一的结果对象,或是在发生错误的时候跑出异常。
Observable用来向订阅者Subscriber对象发布事件,Subscriber对象则在接收到事件后对其进行处理,而在这里所指的事件通常就是对依赖服务的调用。
一个Observable可以发出多个事件,直到结束或是发生异常
Observable对象每发出一个事件,就会调用对应观察者Subscriber对象的onNext()方法
每一个Observable的执行,最后一定会通过Subscriber.onCompleted()或者Subscriber.onError()来结束改事件的操作流。
Hot Observable的每一个“订阅者”都有可能是从“事件源”的中途开始的,并可能只是看到了整个操作的局部过程。而Cold Observable在没有“订阅者”的时候并不会发布事件,而是进行等待,直到有“订阅者”之后才发布事件,所以对Cold Observable的订阅者,他可以保证从一开始看到整个操作的全部过程。
public class CommandRunMain {
public static void main(String[] args) throws InterruptedException {
RunCommand c1=new RunCommand("observer method");
c1.observe();
RunCommand c2=new RunCommand("toObservable method");
Observable ob=c2.toObservable();
ob.subscribe(new Observer<String>(){
public void onCompleted() {
System.out.println("command completed");
}
public void onError(Throwable arg0) {
}
public void onNext(String t) {
System.out.println("*****"+t);
}
});
Thread.sleep(1000);
}
static class RunCommand extends HystrixCommand<String>{
String msg;
public RunCommand(String msg){
super(HystrixCommandGroupKey.Factory.asKey("TestGroup"));
this.msg=msg;
}
protected String run(){
System.out.println(msg);
return "success";
}
}
}