初試響應式異步工具:RxJava

工作中並沒有使用到,而且我覺得像vertx等優秀的框架已經提供了非常完善的異步事件驅動的功能,Spring也有ApplicationExentPublisher來做類似的事。今天就是寫個入門例子,看看。emmmm

當然這裏只是簡單例子,實際使用中應該進一步封裝,Spring中的ApplicationExentPublisher就是很好的運行方式(封裝思路)的參照物。

public class RxJava {

	public static void main(String[] args) {
		/**
		 * 上游消息的產生,這裏的String在實際中就是我們業務上要傳輸的對象
		 */
		Observable<String> obserbable = Observable.create(new ObservableOnSubscribe<String>() {
			@Override
			public void subscribe(ObservableEmitter<String> emitter) throws Exception {
				emitter.onNext("First Msg!");
				emitter.onNext("Sceond Msg!");
			}
		});
		
		/**
		 * 簡單的事件處理方式
		 */
		Consumer<String> consumer = new Consumer<String>() {
			@Override
			public void accept(String s) throws Exception {
				System.out.println(Thread.currentThread().getName() + " ----consumer---:" +  s);
			}
		};
		/**
		 * 更豐富的事件處理方式,RxJava2.0是這個 1.0中是另一個類
		 */
		Observer<String> observer = new Observer<String>() {

			@Override
			public void onComplete() {
				System.out.println(Thread.currentThread().getName()+ " ---Observer.onComplete:");
			}

			@Override
			public void onError(Throwable arg0) {
				System.out.println(Thread.currentThread().getName()+ " ---Observer.onError:" + arg0);
			}

			@Override
			public void onNext(String arg0) {
				System.out.println(Thread.currentThread().getName()+ " ---Observer.onNext:" + arg0);
			}

			@Override
			public void onSubscribe(Disposable arg0) {
				System.out.println(Thread.currentThread().getName()+ " ---Observer.onSubscribe:" + arg0);	
			}
			
		};
		/**
		 * observeOn是異步處理的關鍵。這裏使用Schedulers.newThread()代表事件處理是新開啓的線程中。
		 * 實際應用應設置爲線程池,儘量用自定義的,比較可控
		 * 
		 */
		obserbable.observeOn(Schedulers.newThread()).subscribe(consumer);
		obserbable.observeOn(Schedulers.newThread()).subscribe(observer);
		/**
		 * 阻塞住爲了觀察上面兩個事件的執行結果
		 */
		for(;;);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章