reactive-programming - 如何从 spring webflux 将专有流转换为 Flux
问题描述
我有一个自定义事件总线,我可以在其中订阅 lambda
bus.subscribe(topic, event -> {/*gets executed for every new event*/}, exception -> {})
现在 lambda 显然在不同的线程中运行。现在我的问题是如何将这种接口连接到一个Flux<Event>
?我必须自己写Publisher
吗?但人们说这样做不是一个好主意。
一个模拟实现将是
import java.util.function.Consumer
class Mock extends Thread {
Consumer<String> lambda
public Mock(Consumer<String> lambda) {
this.lambda = lambda
}
@Override
void run() {
while(true) {
Thread.sleep(1000)
lambda.accept("lala")
}
}
}
Flux<String> flux = new Mock({ /*TODO write to flux*/ }).start()
解决方案
你是对的,你不应该实现你自己的发布者。在大多数情况下,您也不必处理线程,而是依赖于Flux
.
就像是:
Flux<Event> events = Flux.<Event>create(emitter -> {
bus.subscribe(topic, event -> emitter.next(event),
exc -> emitter.error(exc));
// you should also unsubscribe
emitter.onDispose(() -> {
bus.unsubscribe(topic, ...);
});
});
推荐阅读
- python - Pip - 显示包的版本
- sql - 交易程序
- acumatica - 如何将 EPTimecardDetail 记录添加到考勤卡?
- python - 保存信息时表单集如何工作?
- python - 将 python 的 odeint() 与 solve_bvp() 结合,出错
- c# - 以特定整数开头的 LINQ 筛选器字段
- python - UserWarning: Matplotlib 当前使用的是 agg,所以无法显示图
- c++ - C++ 位集算法
- image-extraction - 从以位置 (x,y) 为中心的输入图像中提取 3×3 图像片段
- object - lua编程中对象的内存管理存在问题