如何从Spring Webflux将专有流转换为Flux

时间:2018-06-26 11:41:18

标签: reactive-programming spring-webflux project-reactor

我有一个自定义事件总线,可以在其中订阅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()

1 个答案:

答案 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, ...);
     });
 });