Управляемое обратным вызовом исходное приложение Spring Cloud Dataflow - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу создать исходное приложение Spring Cloud Dataflow на основе библиотеки lib, которая подключается к службе обмена сообщениями (на самом деле IRC) и вызывает мой обратный вызов при получении сообщения. Единственная цель исходного приложения - создать сообщение SCDF из полученного сообщения IRC и отправить его в поток.

Я предложил следующее решение:

Класс IrcListener, помеченный @Component, выполняет некоторую настройку и начинает прослушивать сообщения IRC при вызове метода start(). Когда сообщение получено, его обратный вызов onGenericMessage просто отправляет сообщение потоку через внедренное свойство source:

@Component
public class IrcListener extends ListenerAdapter {

    @Override
    public void onGenericMessage(GenericMessageEvent event) {
            Message msg = new Message();
            msg.content = event.getMessage();

            source.output().send(MessageBuilder.withPayload(msg).build());
    }

    private Source source;
    private String _name;
    private String _server;
    private List<String> _channels;

    public void start() throws Exception {
            Configuration configuration = new Configuration.Builder()
                            .setName(_name)
                            .addServer(_server)
                            .addAutoJoinChannels(_channels)
                            .addListener(this)
                            .buildConfiguration();

            PircBotX bot = new PircBotX(configuration);
            bot.startBot();
    }

    @Autowired
    public IrcListener(Source source) {
            this.source = source;

            _name = "ircsource";
            _server = "irc.rizon.net";
            _channels = Arrays.asList("#test".split(","));
    }
}

Основной класс запускает приложение Spring и вызывает вышеупомянутый метод start() для компонента IrcListener.

@EnableBinding(Source.class)
@SpringBootApplication
public class IrcStreamApplication {
    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(IrcStreamApplication.class, args);
        context.getBean(IrcListener.class).start();
    }
}

Это работает нормально, и сообщения принимаются и публикуются в потоке успешно, но я хотел бы знать, является ли этот подход правильным для вселенной Spring (Cloud Dataflow) и, возможно, я упускаю что-то важное?

1 Ответ

0 голосов
/ 07 ноября 2018

выглядит нормально; но, как правило, источники, управляемые сообщениями, расширяют MessageProducerSupport и вызывают sendMessage(Message<?>).

(и переопределить doStart() в этом случае).

Это даст вам доступ к отслеживанию истории сообщений и обработке ошибок (если отправка не удалась).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...