2014-07-07 100 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');