2014-07-07 150 views
0

我想發送消息,客戶端輸入到瀏覽器使用STOMP和ActiveMQ隊列。 STOMP連接從我在控制檯中讀取的讀數成功。我沒有收到錯誤並正在使用該行:STOMP消息沒有到達隊列

stompClient.send("/queue/testQSource", {}, JSON.stringify({ 'name': name })); 

在我的index.html中這樣做。但是,當我輸入瀏覽器後檢查ActiveMQ控制檯時,testQSource不會被添加。我是否使用正確的STOMP語法來實現此目的?我需要在HTML文件的頂部添加除STOMP源以外的任何源嗎?

隊列在此實例中的駱駝路線:

 <from uri="jms:queue:testQSource"/> 
     <to uri="securityBean"/> 
     <log message="Routing message from testQSource to testQDestination queue with data ${body}"/> 
     <to uri="jms:queue:testQDestination"/> 
     <to uri="activationBean"/> 
     <log message="message: ${body}"/> 

編輯

我現在打通的消息,但我收到以下警告:

WARN : org.apache.camel.component.jms.JmsBinding - Cannot determine specific JmsMessage type to use from body class. Will use generic JmsMessage. Body class: hello.HelloMessage. If you want to send a POJO then your class might need to implement java.io.Serializable, or you can force a specific type by setting the jmsMessageType option on the JMS endpoint. 

我相信這是因爲STOMP消息與隊列和/或路由所期望的形式不同。但是,我不知道如何配置我的路線,使我可以使用我的STOMP消息。有小費嗎?

+0

的URI駱駝航線配置包含JMS但STOMP是不同的。你嘗試過跺腳而不是jms嗎? – Buchi

回答

1

沒有更多信息說這有點難,但我的第一個猜測是,在消息有機會寫入套接字或讀取ActiveMQ之前,stomp客戶端連接已關閉。您可能需要考慮通過向出站幀添加請求ID來阻止放入隊列,並等待Broker向您發送響應幀。這將確保您的消息在連接關閉之前發佈。

如何執行阻塞取決於您使用的客戶端,因此您需要查看文檔以查看正確的方法。通常有一個同步發送方法,或者客戶端將'receipt'頭添加到幀,然後進行阻塞接收,直到找回具有正確匹配的'receipt-id'頭的RECEIPT幀。

0

您是否正在連接ActiveMQ服務器上的stomp端口? 如在「transportConnector」下的config(activemq.xml)中看到的,stomp需要在默認配置上連接到端口61613。

使用Node.js的以「跺腳的客戶」和本地主機上默認的ActiveMQ服務器:

var my_client = new Stomp('127.0.0.1', 61613, 'admin', 'admin');