我實現了Spring的JMS的一個HornetQ工作。它完美的工作如果它的一個應用程序服務器HornetQ。但是,如果兩個應用程序服務器正在訪問HornetQ。我不工作。爲了識別不同的服務器,我介紹了clientId,但它仍然不起作用。這是我的流程。JMS消息選擇不會在多服務器環境
準備消息與發送的clientId(其發送消息獨特SERVERID)與相關性id並將其與Quename與接口ProducerCallback「Q1」發送到HorentQ並等待響應。
request.setStringProperty("clientId", clientId); request.setJMSCorrelationID(correlationId);
在Consumder身邊,我已經
DefaultMessageListenerContainer
將被監聽隊列Q1。一旦該消息被接收我處理它,並在響應對象設置correlaionId和的clientId回來了,它發送到另一個Q「Q2」final String clientId = request.getStringProperty("clientId"); final String correlationId = request.getJMSCorrelationID(); response.setJMSCorrelationID(correlationId); response.setStringProperty("clientId", clientId);
在發送端我有另一個
DefaultMessageListenerContainer
將被監聽Q2 。用消息選擇器來選擇基於clientId的消息。當一個服務器envolved<bean id="jmsContatiner" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="messageSelector" value="clientId='server1'" /> <property name="concurrency" value="1" /> <property name="messageListener" ref="responseListener" /> <property name="destinationName" value="Q2" /> <property name="connectionFactory" ref="connectionFactory" /> </bean>
的代碼工作正常。但是第二臺服務器的消息永遠不會被該服務器中的偵聽器收到,它會監聽Q2(正如我在HornetQ的JConsole中看到的那樣)。這是發生了什麼。
服務器1發送消息給Q1和消費者接收消息進行處理,並把在Q2和服務器1通過的clientId server1的選擇信息從Q1接收該消息。但是,當Server2將消息發送給Q1並且消費者接收到消息時,它會對Q2進行處理。但是,Server2偵聽器無法選擇基於clientId server2的消息。當我重新啓動服務器並開始使用server2進行測試時,notw server2正常工作,但server1未收到消息。
任何幫助,非常感謝。
是不是應該引用值?即' ' –
kan
抱歉它是複製錯誤,值在引號內。在日誌中我可以看到clientId是server1或server2 –