Я использую стороннюю библиотеку для регистрации MessageListener, и когда происходят определенные события, они вызывают зарегистрированных слушателей по методу onMessage
public interface MessageListener {
// third party code, it auto-scans for all MessageListeners and registers them
void onMessage(Message message);
}
public class SimpleMessageListener implements MessageListener {
public void onMessage(Message message) {
//do something non blocking
//is it possible to 'transmit' to messagePublisher
}
public Flux<Message> messagePublisher() {
// a method to which to subscribeOn
}
}
Итак, мой вопрос, как лучше всего превратить это в поток
В конце я хотел бы иметь возможность сделать что-то вроде этого
messagePublisher().subscribe(System.out::println);
************** edit
Моя первая попытка что-то вроде этого
private List<FluxSink<Message>> handlers = new ArrayList<>();
public void onMessage(Message message) {
handlers.forEach(han -> han.next(message));
}
public Flux<Message> messagePublisher() {
return Flux.create(sink -> {
handlers.add(sink);
sink.onDispose(() -> handlers.remove(sink));
});
}
, который работает - но я чувствую, что это не очень хорошее решение, лучше ли, чтобы класс реализовывал FluxSink и обрабатывал вручную - в настоящее время я не ожидаю, что у меня будет много подписчиков.
Но много MessageListeners (по одному для каждого типа)