【问题标题】:STOMP Messages not reaching queueSTOMP 消息未到达队列
【发布时间】:2014-08-28 06:57:43
【问题描述】:

我正在尝试使用 STOMP 和 ActiveMQ 将客户端输入浏览器的消息发送到队列。从我在控制台中获得的读数来看,STOMP 连接是成功的。我没有收到错误并且正在使用该行:

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

在我的 index.html 中这样做。但是,当我输入浏览器后检查ActiveMQ控制台时,testQSource并没有添加。我是否使用正确的 STOMP 语法来实现这一点?除了 STOMP 源之外,我是否需要在 HTML 文件的顶部添加任何源?

这里用骆驼路线实例化队列:

        <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 消息的方式配置我的路由。有什么建议吗?

【问题讨论】:

  • 骆驼路由配置中的 URI 包含 JMS,但 STOMP 不同。你试过用 stomp 代替 jms 吗?

标签: websocket activemq stomp


【解决方案1】:

没有更多信息很难说,但我的第一个猜测是,在消息有机会写入套接字或被 ActiveMQ 读取之前,stomp 客户端连接正在关闭。您可能需要考虑通过将请求 ID 添加到出站帧并等待代理向您发送响应帧来将阻塞放入队列。这将确保在关闭连接之前发布您的消息。

如何执行阻塞放置取决于您使用的客户端,因此您需要查看文档以了解执行此操作的正确方法是什么。通常有同步发送方法,或者客户端将“receipt”标头添加到帧中,然后执行阻塞接收,直到您返回带有正确匹配“receipt-id”标头的 RECEIPT 帧。

【讨论】:

    【解决方案2】:

    您是否在 ActiveMQ 服务器上的 stomp 端口上连接? 如“transportConnector”下的配置(activemq.xml)所示 stomp 需要在默认配置上连接端口 61613。

    使用带有“stomp-client”的 Node.js 和本地主机上的默认 ActiveMQ 服务器:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2012-12-08
      • 1970-01-01
      • 2012-05-22
      • 2012-09-03
      • 2021-07-21
      • 1970-01-01
      相关资源
      最近更新 更多