Spring集成dsl:按负载类型路由

wwa*_*dge 2 spring-integration

鉴于:

   return from(listenerContainer(connectionFactory, queue))
             .handle(Foo.class, new HandlerForFoo()).get();
}
Run Code Online (Sandbox Code Playgroud)

如果通道接收到Bar.class类型的有效负载,我怎么能让它调用HandlerForBar?我的意思是这样的:

      return from(listenerContainer(connectionFactory, queue))
             .handle(Bar.class, new HandlerForBar());
             .handle(Foo.class, new HandlerForFoo()).get();
}
Run Code Online (Sandbox Code Playgroud)

Art*_*lan 6

它不起作用.流定义假设第二个.handle()跟在第一个之后.

为了您的payload type目的,有一个特殊的企业集成模式 - 消息路由器.

Spring Integration提供了关于此事的特定实现 - PayloadTypeRouter.

使用Spring Integration Java DSL,我们可以通过以下方式满足您的要求:

.<Object, Class<?>>route(Object::getClass, m -> m
        .subFlowMapping(Bar.class.getName(), sf -> sf.handle(new HandlerForBar())
        .subFlowMapping(Foo.class.getName(), sf -> sf.handle(new HandlerForFoo())
Run Code Online (Sandbox Code Playgroud)