如何在 Java 7 中启动 spring 集成 java dsl 子流程?

How to start spring integraton java dsl subflows in Java 7?

嘿,我无法让子流程部分与 java dsl 一起工作。

public IntegrationFlow flow() {
    return IntegrationFlows
        .from("messageRoutingChannel")
        .route("headers." + HeaderKeys.CONNECTION_ID, new Consumer<RouterSpec<ExpressionEvaluatingRouter>>() {
            @Override
            public void accept(RouterSpec<ExpressionEvaluatingRouter> spec) {
                spec.subFlowMapping("connection101", 
                        IntegrationFlows.from("messageRoutingChannel")
                            .handle(new GenericHandler<String>() {
                                @Override
                                public Object handle(String payload, Map<String, Object> arg1) {
                                    System.out.println(payload + " after routing");
                                    return null;
                                }
                            })
                            .get());
            }
        })
        .get();

}

现在,当我将 IntegrationFlow 添加到子流时,我必须给它一个 from() 对吗?我真的不知道该给那里什么。我尝试将 channel() 放在 route() 的正上方,然后从该频道执行 from(),但这也不起作用。参考中的大多数示例都使用 lambda,因此那里没有明确的 IntegrationFlows.from()。只是一个 sf -> sf.handle()

java @Bean public IntegrationFlow routeFlow() { return f -> f .<Integer, Boolean>route(p -> p % 2 == 0, m -> m.channelMapping("true", "evenChannel") .subFlowMapping("false", sf -> sf.<Integer>handle((p, h) -> p * 3))) .transform(Object::toString) .channel(c -> c.queue("oddChannel")); }

from 隐式计算出 though 的结果是什么?我怎样才能让它在 Java 7 中工作?感谢您的帮助。

嗯,首先,用 Java 7 编写自己的代码并不是个好主意。因为它看起来已经像一盘意大利面条了。但是如果你要在那里添加业务逻辑怎么办?..

对于您的 Java 7 情况,最好使用标准路由设置并根据通道制定逻辑,并在 Java 8 升级之前忘记子流。

无论如何你可以这样:

spec.subFlowMapping("connection101", new IntegrationFlow() {

      @Override
      void configure(IntegrationFlowDefinition<?> flow) {
           flow.handle(...);
      }

})

仅仅因为sf -> sf.handle(...)是内联接口实现的缩写形式。