我有一个自定义事件总线,可以在其中订阅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()
答案 0 :(得分:0)
是的,您不应该实施自己的发布商。在大多数情况下,您也不必处理线程,而是依靠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, ...);
});
});