reactor-核心
永远别独自展开异步工作。
— Jon Brisbin
在写 Reactor 1 之后永远别独自展开异步工作。
— Stephane Maldini
在写 Reactor 2 之后
先来看看,某项目是如何使用 Groovy 的:
// 初始化上下文,获取默认调度者
Environment.initialize()
// RingBufferDispatcher,默认带 8192 槽容量
def dispatcher = Environment.sharedDispatcher()
// 创建回调
Consumer<Integer> c = { data ->
println "some data arrived: $data"
}
// 创建 error 回调
Consumer<Throwable errorHandler = { it.printStackTrace }
// 异步分发数据
dispatcher.dispatch(1234, c, errorHandler)
Environment.terminate()
然后,再看看响应式数据流例子
// 独立异步处理者
def processor = RingBufferProcessor.<Integer>create()
// 发送数据,确保数据的安全性,直到订阅成功
processor.onNext(1234)
processor.onNext(5678)
// 消费整型数据
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!'
}
}
// 完全关闭内部线程和调用
processor.onComplete()