代码之家  ›  专栏  ›  技术社区  ›  KIC

如何将专有流从spring webflux转换为流

  •  1
  • KIC  · 技术社区  · 6 年前

    我有一个定制的事件总线,在那里我可以订阅

     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 回复  |  直到 6 年前
        1
  •  0
  •   Brian Clozel    6 年前

    你说得对,你不应该实现你自己的出版商。在大多数情况下,您也不必处理线程,而是依赖于 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, ...);
         });
     });