【问题标题】:Spring Integration DSL: wont execute other components after executing routeToRecipientsSpring Integration DSL:执行 routeToRecipients 后不会执行其他组件
【发布时间】:2017-02-14 21:29:54
【问题描述】:

运行应用程序时,流程在 routeToRecipients 处停止,其他组件未执行。 (见下面代码中的内联 cmets) 没有发生错误。

但是当我删除 routeToRecipients() 时,其他组件会执行。

我的集成流程有问题吗?

@MessagingGateway
public interface gateway {
    @Gateway(requestChannel = "request.input")
    void process(List<Msg> test);
}

@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata poller() {
    return Pollers.fixedDelay(1000).get();
}

@Bean
public IntegrationFlow flow() {
    return IntegrationFlows.from("request.input")
            .split()
            .channel(MessageChannels.executor(Executors.newCachedThreadPool()))
            .transform(this.transformer::transform)
            .routeToRecipients(r -> 
                    r.recipient("channel1")
                     .recipient("channel2")
                     .recipient("channel3")
                     .recipient("channel4"))
            .transform(this.transformer::transform2) // <---this is not executed :(
            .handle(new GenericHandler<Msg>() {     // <---this too is not executed
                @Override
                public Object handle(Msg payload, Map<String, Object> headers) {
                    System.out.println("test service activator!");
                    return null;
                }
            })
            .get();
}


@Bean
public IntegrationFlow flow1() {
    return IntegrationFlows.from("channel1")
            .handle(new GenericHandler<Msg>() {
                @Override
                public Object handle(Msg payload, Map<String, Object> headers) {
                    System.out.println("Test route Channel 1")
                    return payload;
                }
            })
            .channel("output")
            .get();
}

@Bean
public IntegrationFlow flow2() {
    return IntegrationFlows.from("channel2")
            .handle(new GenericHandler<Msg>() {
                @Override
                public Object handle(Msg payload, Map<String, Object> headers) {
                    System.out.println("Test route Channel 2")
                    return payload;
                }
            })
            .channel("output")
            .get();
}

@Bean
public IntegrationFlow flow3() {
    return IntegrationFlows.from("channel3")
            .handle(new GenericHandler<Msg>() {
                @Override
                public Object handle(Msg payload, Map<String, Object> headers) {
                    System.out.println("Test route Channel 3")
                    return payload;
                }
            })
            .channel("output")
            .get();
}

    @Bean
public IntegrationFlow flow4() {
    return IntegrationFlows.from("channel4")
            .handle(new GenericHandler<Msg>() {
                @Override
                public Object handle(Msg payload, Map<String, Object> headers) {
                    System.out.println("Test route Channel 4")
                    return payload;
                }
            })
            .channel("output")
            .get();
}

【问题讨论】:

    标签: spring java-8 spring-integration messaging dsl


    【解决方案1】:

    路由器没有输出通道 - 它只向接收者发送消息。

    您可以在路由器之前放置一个发布/订阅通道,路由器是一个订阅者,其余的流是第二个订阅者。

    或者添加通道 5 并使用该通道启动剩余的流程(在新流程中)。

    【讨论】:

    • 谢谢加里!这真的很有帮助。 :)
    • 如何添加channel5?代替 .transform(this.transformer::transform2)?我认为在基于 xml 的配置中,可以聚合并继续下一个组件。这是不对的吗?我现在有同样的问题,因为我们使用的是 DSL。任何有关流程的帮助以继续其他组件表示赞赏
    • @KrisSwat 不要在 cmets 中针对 4 岁的答案提出新问题(尤其是在不清楚时);提出一个新问题,显示您的流 DSL。
    • @KrisSwat 抽象地回答这些问题太难了;您需要显示您的特定代码以及您尝试过的内容。在上面的例子中,channel5 将是另一个接收者,剩余的流(在路由器之后)被放入另一个流中,从channel5 开始。我认为我的回答很清楚;因此我以为你在寻找别的东西。
    • 像这样的重要问题不会得到一个赞成票,因此 stackoverflow 将禁止用户提问,因为这些问题被认为不太受欢迎。问题 - 路由器没有输出通道。同意。在路由到收件人并继续相同的流程之后,如何有更多的处理方法或其他方法?来自 spring-integration 示例 [dsl si4demo] 的 FMail java 也停在 .routeToRecipients。我想要的是 - 在 routetorecipients 之后说一个处理程序,以便将其应用于两者 - 不要在 2 个不同的流程中重复
    猜你喜欢
    • 1970-01-01
    • 2017-10-30
    • 2020-05-30
    • 1970-01-01
    • 2015-10-18
    • 2016-09-23
    • 1970-01-01
    • 2023-03-16
    • 2018-10-02
    相关资源
    最近更新 更多