我有一个自定义事件总线,可以在其中订阅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, ...);
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句