2017-07-18 29 views

回答

1

你可以這樣說:

IntegrationFlows 
       .from(Jms.messageDrivenChannelAdapter(jmsConnectionFactory()) 
         .destination("DUMMY") 
         .configureListenerContainer(c -> 
           c.destinationResolver((session, s, b) -> 
            YOUR LOGIC FOR DYNAMIC DESTINATION RESOLUTION))) 

你需要一個"DUMMY"目標配置嘲笑容器狀態:

protected void validateConfiguration() { 
    if (this.destination == null) { 
     throw new IllegalArgumentException("Property 'destination' or 'destinationName' is required"); 
    } 
} 

OTOH我不知道它是要反正正常工作。

容器根據目的地啓動JMS Consumer(即使您通過自定義DestinationResolver提供),並且在容器停止之前它不能更改。

儘管您可以考慮使用Jms.inboundAdapter(),但這是可輪詢的,但基於JmsTemplate.receiveSelected()。這樣,您可以更改來自輪詢器的每個調用的目標。你需要dummy destinationName配置。否則它不會去getDestinationResolver()

+0

我通過執行代碼意識到,destinationResolver在另一個方向工作,因此給定一個名稱可以返回目標,我需要的是可以爲適配器指定多個主題,以便從給定目標返回我一個名字或其他東西來區分子流...... – Whimusical

+1

正如你所看到的'ListenerContainer'設計,它是不可能的。您只能配置一個目的地。 –

相關問題