永遠別獨自展開異步工作。
— Jon Brisbin
在寫 Reactor 1 之后永遠別獨自展開異步工作。
— Stephane Maldini 在寫 Reactor 2 之后
先來看看,某項目是如何使用 Groovy 的:
// 初始化上下文,獲取默認調(diào)度者
Environment.initialize()
// RingBufferDispatcher,默認帶 8192 槽容量
def dispatcher = Environment.sharedDispatcher()
// 創(chuàng)建回調(diào)
Consumer<Integer> c = { data ->
println "some data arrived: $data"
}
// 創(chuàng)建 error 回調(diào)
Consumer<Throwable errorHandler = { it.printStackTrace }
// 異步分發(fā)數(shù)據(jù)
dispatcher.dispatch(1234, c, errorHandler)
Environment.terminate()
然后,再看看響應(yīng)式數(shù)據(jù)流例子
// 獨立異步處理者
def processor = RingBufferProcessor.<Integer>create()
// 發(fā)送數(shù)據(jù),確保數(shù)據(jù)的安全性,直到訂閱成功
processor.onNext(1234)
processor.onNext(5678)
// 消費整型數(shù)據(jù)
processor.subscribe(new Subscriber<Integer>(){
void onSubscribe(Subscription s){
//unbounded subscriber
s.request Long.MAX
}
void onNext(Integer data){
println data
}
void onError(Throwable err){
err.printStackTrace()
}
void onComplete(){
println 'done!'
}
}
// 完全關(guān)閉內(nèi)部線程和調(diào)用
processor.onComplete()