你可以這樣說:
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()
。
我通過執行代碼意識到,destinationResolver在另一個方向工作,因此給定一個名稱可以返回目標,我需要的是可以爲適配器指定多個主題,以便從給定目標返回我一個名字或其他東西來區分子流...... – Whimusical
正如你所看到的'ListenerContainer'設計,它是不可能的。您只能配置一個目的地。 –