春季集成DSL ::从XML调用频道时面对问题



我做了一个简单的DSL,该DSL从数据库中检索数据并在服务激活器中进行简单转换。

    @Bean
public IntegrationFlow mainFlow() {
    return IntegrationFlows.from("userChannel")
                .channel("queryChannel")
                .handle("sampleConvertor","convertUser")
                .get();

QueryChannel是JDBC出站网关,SampleConverter是服务激活器。

<int-jdbc:outbound-gateway query="select * from employee where employee_id=:payload"
request-channel="queryChannel" data-source="dataSource"/>

问题是在从数据库中检索数据后,流程不会转到ServiceActivator,并且只需返回数据库响应。

在XML配置中,我曾经在链中调用网关,如下面的链条。

<int:gateway id="query.gateway" request-channel="queryChannel"/>

请建议我在这里做错了什么。预先感谢。

组合Java DSL和XML配置有点不寻常,但是它们仍然可以一起工作。

您的问题我认为您缺少queryChannel在运行时有两个订户的事实,而不是通话链。

第一个是<int-jdbc:outbound-gateway>,第二个是.handle("sampleConvertor","convertUser")。是的,当您在IntegrationFlow中声明通道时,下一个EIP方法会为此通道产生A subscriber 。同时,当您在XML配置中使用request-channelinput-channel之类的通道也带来了订户。

因此,您的DirectChannel上有两个订户,因此只有一个RoundRobinLoadBalancingStrategy,因此只有一个会处理一条消息,如果它是请求重复组件,就像<int-jdbc:outbound-gateway>一样,它将在output-channelreplyChannel中产生消息在标题中。在您的情况下,故事正是关于replyChannel的,因此您不去.handle("sampleConvertor","convertUser"),因为它不是链中的下一个,而只是圆形旋转算法的平行宇宙。

如果您确实想在拨打<int-jdbc:outbound-gateway>之后到达.handle("sampleConvertor","convertUser"),则应考虑使用.gateway("queryChannel")而不是该.channel()

最新更新