2016-01-26 82 views
2

途徑給藥:Spring集成DSL:通過負載類型

return from(listenerContainer(connectionFactory, queue)) 
      .handle(Foo.class, new HandlerForFoo()).get(); 
} 

我怎麼可以把它稱之爲HandlerForBar給出的信道接收類型Bar.class的有效載荷?我的意思是這樣的:

 return from(listenerContainer(connectionFactory, queue)) 
      .handle(Bar.class, new HandlerForBar()); 
      .handle(Foo.class, new HandlerForFoo()).get(); 
} 

回答

5

它不工作的方式。流程定義假定第一個後面跟着第二個.handle()

對於你的payload type目的,有一個特殊的企業集成模式 - Message Router

Spring Integration爲此提供了特定的實現 - PayloadTypeRouter

使用Spring集成的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())