如何在 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(...)
是内联接口实现的缩写形式。
嘿,我无法让子流程部分与 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(...)
是内联接口实现的缩写形式。