给定:
return from(listenerContainer(connectionFactory, queue))
.handle(Foo.class, new HandlerForFoo()).get();
}
如果 channel 接收到 Bar.class 类型的负载,我如何让它调用 HandlerForBar?我的意思是这样的:
return from(listenerContainer(connectionFactory, queue))
.handle(Bar.class, new HandlerForBar());
.handle(Foo.class, new HandlerForFoo()).get();
}
请您参考如下方法:
这样不行。流定义假定第二个 .handle()
在第一个之后。
对于您的有效负载类型
,有一个特殊的企业集成模式 - Message Router .
Spring Integration 提供了有关此事的具体实现 - PayloadTypeRouter
.
借助 Spring Integration Java DSL,我们可以通过以下方式满足您的要求:
.<Object, Class<?>>route(Object::getClass, m -> m
.subFlowMapping(Bar.class, sf -> sf.handle(new HandlerForBar())
.subFlowMapping(Foo.class, sf -> sf.handle(new HandlerForFoo())