2017-04-21 118 views
0

<int-jms:message-driven-channel-adapter>彈簧一體化JMS消息驅動的通道適配器使用選擇

使用消息驅動的適配器,我要使用選擇器從AMQ經紀人過濾消息。

消息來進行篩選,其使用選擇豆裁判選項

+0

你的問題不清楚;選擇器不能在運行時更改(不停止/啓動容器);它在初始化期間被烘烤到消費者中。 –

+0

感謝您的回覆,我想使用消息驅動通道適配器中的選擇器屬性來過濾消息。我能夠在選擇器屬性@bean.method()中調用bean方法,但無法將頭參數傳遞給該方法@bean.method(header.param)。我期待選擇器應該動態驗證將標頭參數傳遞給bean方法並返回布爾結果,以便可以過濾消息。 – Augustin

+0

上面的選擇器屬性有bean方法配置爲每當從AMQ選擇消息時都動態地接收頭部參數,但是它在語法上錯誤不能傳遞頭部參數能否幫助 – Augustin

回答

1

在回答您的意見驗證動態豆變量值..

感謝您的回覆,我想用選擇來過濾消息消息驅動通道適配器中的屬性。我能夠在選擇器屬性@bean.method()中調用bean方法,但無法將頭參數傳遞給該方法@bean.method(header.param)。我期待選擇器應該動態驗證將標頭參數傳遞給bean方法並返回布爾結果,以便可以過濾消息。

<int-jms:message-driven-channel-adapter connection-factory="connectionFactoryName" 
    destination="destinationName" channel="channelName" 
    selector="#{@bean.method(header.param)}" auto-startup="false"/> 

上述選擇屬性具有配置成從AMQ動態接收頭PARAM每當拾取消息bean方法。但它在語法上錯誤不能傳遞頭部參數。你能幫我嗎?

你似乎並不理解一個JMS消息選擇是什麼...

selector="foo='bar'" 

...告訴經紀人只與foo屬性等於bar發送消息。 它在啓動期間在消費者上配置。

你有什麼不是「動態」。 #{...}表達式在上下文初始化過程中被評估一次。

你試圖做的事情沒有意義;沒有評價標題的「消息」。根據消息的內容,您無法告訴代理髮送哪些消息。過濾是在發送消息之前在代理上完成的。

如果你不介意的「失去」你的消息不感興趣(或由一個主題是消費),並要篩選要處理消息,然後添加一個

<filter ... expression="#{@bean.method(header.param)}" /> 

適配器後。您可以使用丟棄通道將被忽略的消息重新發布到另一個隊列(或者用它們做其他事情)。

相關問題