回调驱动的Spring Cloud Dataflow源应用程序

时间:2018-11-07 11:07:11

标签: java spring spring-cloud-stream spring-cloud-dataflow

我想基于连接到消息传递服务(实际上是IRC)的lib创建一个Spring Cloud Dataflow源应用程序,并在消息到达时调用我的回调。源应用程序的唯一目标是根据收到的IRC消息创建SCDF消息并将其发送到流中。

我提出了以下解决方案:

IrcListener注释的@Component类进行一些配置,并在调用start()方法时开始侦听IRC消息。收到消息后,其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 Application,并在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)Universe中采用的正确方法,或者我是否缺少一些重要的东西?

1 个答案:

答案 0 :(得分:1)

看起来还不错;但是通常,消息驱动的源会扩展MessageProducerSupport并调用sendMessage(Message<?>)

(在这种情况下,请覆盖doStart())。

它将使您能够访问消息历史记录跟踪和错误处理(如果发送失败)。