EventProcessor
事件流程处理器。推送一个事件 Event 并得到结果。 EventProcessor 在功能上可以认为是一组 EventListener 的统一处理单位。
协程上下文
当通过 EventProcessor.push 推送一个事件并得到一个事件处理链时, 这其中的每一个事件处理器所处上下文会通过 Flow.flowOn 运行在 EventDispatcherConfiguration.coroutineContext 中。
val app = launchApplication(...) {
eventDispatcher {
coroutineContext = context1 // 配置事件调度器的统一上下文
}
}
app.eventDispatcher.register { context ->
withContext(context2) { // 在事件处理逻辑内切换上下文
// ...
}
EventResult.empty()
}
val flow = app.eventDispatcher.push(event)
// 上游的逻辑会通过 flowOn 运行在 context1 中
.onEach { ... } // 会切换到 context3 上
.flowOn(context3) // 将上游调度器切换至 context3
.onEach { ... } // 会在 collect 所在的默认(当前)环境中
.collect { ... } // 在默认(当前)环境收集结果
Content copied to clipboard
参考上述示例,协程上下文的使用“优先级”可“近似地”参考为 context2
context1
context3
。
Java API
在 EventProcessors
的静态API中提供了一些非挂起的可供 Java 友好调用的API, 例如:
List<EventResult> resultList = EventProcessors.pushAndCollectToListAsync(processor, event, scope);
// ...
Content copied to clipboard
Flux<EventResult> resultList = EventProcessors.pushAndAsFlux(processor, event, scope);
// ...
Content copied to clipboard
其中提供了一些异步或响应式相关的转化、处理API。 对于它们各自的说明、限制、要求则在 push 的基础上参考它们的文档说明。
Author
ForteScarlet
Inheritors
Functions
Link copied to clipboard
推送一个事件, 得到内部所有事件依次将其处理后得到最终的结果流。
Link copied to clipboard
通过 scope 将事件推送并异步处理,不关心事件的结果。
Inherited functions
Link copied to clipboard
推送事件并将结果转化为 Flux. 需要项目环境中存在 kotlinx-coroutines-reactor
依赖。
Link copied to clipboard
推送事件并将结果转化为 Stream 后返回。
Link copied to clipboard
suspend fun EventProcessor.pushAndCollect(event: Event, collector: FlowCollector<EventResult>? = null)
将事件推送并收集处理。
Link copied to clipboard
fun <C : MutableCollection<in EventResult>> EventProcessor.pushAndCollectToAsync(event: Event, scope: CoroutineScope, collection: C): CompletableFuture<C>
推送事件并将结果收集为 C 后返回 CompletableFuture.
fun <R> EventProcessor.pushAndCollectToAsync(event: Event, scope: CoroutineScope, collector: Collector<EventResult, *, R>): CompletableFuture<R>
推送事件并将结果使用 Collector 收集为 R 后返回 CompletableFuture.
Link copied to clipboard
fun <C : MutableCollection<in EventResult>> EventProcessor.pushAndCollectToBlocking(event: Event, collection: C): C
推送事件并将结果收集为 C 后返回。
fun <R> EventProcessor.pushAndCollectToBlocking(event: Event, collector: Collector<EventResult, *, R>): R
Link copied to clipboard
fun EventProcessor.pushAndCollectToListAsync(event: Event, scope: CoroutineScope): CompletableFuture<out List<EventResult>>
推送事件并将结果收集为 List 后返回 CompletableFuture.
Link copied to clipboard
推送事件并将结果收集为 List 后返回。
Link copied to clipboard
fun EventProcessor.pushAndLaunch(scope: CoroutineScope, event: Event, collector: FlowCollector<EventResult>? = null): Job
将事件推送并异步处理。
Link copied to clipboard
inline fun EventProcessor.pushAndLaunchThen(scope: CoroutineScope, event: Event, crossinline useFlow: (Flow<EventResult>) -> Unit): Job
将事件推送并异步处理。