给定:

   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()) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!