Как превратить собственный поток в поток от весеннего webflux - PullRequest
0 голосов
/ 26 июня 2018

У меня есть специальная шина событий, где я могу подписаться на лямбду, например

 bus.subscribe(topic, event -> {/*gets executed for every new event*/}, exception -> {})

Теперь лямбда явно работает в другом потоке. Теперь мой вопрос: как я могу подключить такой интерфейс к 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 голосов
/ 26 июня 2018

Вы правы, вы не должны реализовывать своего собственного издателя. В большинстве случаев вам также не нужно иметь дело с потоками, а вместо этого полагаться на статические методы на 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, ...);
     });
 });
...