我目前正在基於Spring Integration(ver。3.0.1.RELEASE)應用程序實現一個流程,該流程需要將消息存儲在JMS隊列中以稍後再拾起。 爲此,我一直在嘗試將Spring Integration JMS入站通道適配器與自定義選擇器一起使用,然後通過將JMSDestinationPollingSource的JMS選擇器更改爲某個包含作爲標題屬性的匹配ID來從隊列中拾取消息。Spring集成控制總線消息來更改JMS入站通道適配器的選擇器
其中一個要求是我不能添加一個新的服務或一個JAVA方法,所以我一直試圖使用控制總線對它進行整理,但當我發送消息時仍然收到相同的錯誤將messageSelector
設置爲不同的東西。
入站通道適配器定義:
<int-jms:inbound-channel-adapter id="inboundAdapter"
channel="inboundChannel"
destinationName="bufferQueue"
connection-factory="connectionFactory"
selector="matchingID = 'NO VALUE'">
<int:poller fixed-delay="1000"/>
</int-jms:inbound-channel-adapter>
消息:
@'inboundAdapter.source'.setMessageSelector("matchingID = 'VALUE'")
錯誤:
EvaluationException: The method 'public void org.springframework.integration.jms.JmsDestinationPollingSource.setMessageSelector(java.lang.String)' is not supported by this command processor. If usign the Control Bus, consider adding @ManagedOperation or @ManagedAttribute.
其中,AFAIK,意味着該JmsDestinationPollingSource
類不是控制總線管理,如它沒有通過ControlBusMethodFilter。
這種方法是否存在,或者是否有我遺失的東西?有沒有辦法只使用SI XML配置文件動態設置選擇器?
我使用Transformer將選擇器設置爲具有匹配ID值作爲標題屬性的消息,並將Transformer的表達式設置爲'expression =''matchingID ='''+ headers [matchingID] +'''' 「',但似乎不起作用。沒有消息記錄,但是,具有該頭部屬性的消息未被消耗。 – gnzlrm
您必須將該代碼作爲EDIT分享給您的問題。關於此事的記錄也很有用。 –
沒關係。顯然它工作,但花了15分鐘來輪詢來自JMS隊列的消息。在原始問題上發佈輪詢器配置時,輪詢操作不應該是每秒一次?我已經標記答案爲正確和upvoted,感謝您的幫助:) 是的,有人很自豪,他做了一個非常通用的應用程序來管理大量的流而不編寫服務,現在認爲添加一個JAVA顯然,階級會毀了他的成就。 – gnzlrm