首页 > 解决方案 > Spring 集成 + 向 kafka 发送 2 个事件

问题描述

我有一个消息网关,它在输入通道中接收一个 http Json 请求。

我想将 2 个事件作为同一请求的一部分发送到 kafka,一个事件用于接收,一个事件用于处理。

使用 Spring Integration 实现这一目标的最佳方法是什么?

我就是这样做的,它可以工作,但不确定是否有更好的方法:

@Bean
public IntegrationFlow processMessage() {
    return IntegrationFlows
            .from("inputChannel")
            .routeToRecipients(r -> r.recipient("inputChannel2")
                                    .recipient("inputChannel3"))
            .get();
}

@Bean
public IntegrationFlow sendReceived(MessageTransformer messageTransformer) {
    return IntegrationFlows
            .from("inputChannel2")
            .transform(messageTransformer)
            .handle( this.kafkaMessageHandler() )
            .get();
}

@Bean
public IntegrationFlow sendProcessed(MessageTransformer2 messageTransformer) {
    return IntegrationFlows
            .from("inputChannel3")
            .transform(messageTransformer)
            .handle( this.kafkaMessageHandler() )
            .get();
}

谢谢。

标签: javaspringspring-integration

解决方案


嗯,你做的没问题。实现相同目标的另一种方法是使用 apoublishSubscribeChannel代替:

https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-implementations-publishsubscribechannel

https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl-subflows

您也可以考虑为 Kafka 消息处理程序设置一个配置,并从这两个分发流中为它重用一个通道。


推荐阅读