【问题标题】:JMSXGroupID/correlation-id to queue messages on stomp client doesn't seem to workJMSXGroupID/correlation-id 在 stomp 客户端上排队消息似乎不起作用
【发布时间】:2012-08-07 08:58:48
【问题描述】:

我试图在节点服务器上使用 stomp-js 将消息排队到同一消费者。

制作人:

producer.send({'JMSXGroupID':JMSXGroupID, 'destination':confMgr.getConfig("jmsqueue.destination"), 'body':JSON.stringify(msg), 'persistent':'true'}, false);

消费者:

client.on('message', function(message) {
    client.ack(message.headers['message-id']);
})

我使用相同的 JMSXGroupID 发送两条消息,似乎客户端并行处理这两条消息,而不是处理 message1 并确认它,然后继续处理 message2,然后确认 message2。我尝试使用'correlation-id',但它似乎也不起作用。任何人都可以提出更好的方法吗? 先感谢您, 钱德拉。

【问题讨论】:

    标签: activemq stomp


    【解决方案1】:

    我猜你正在使用这个 stomp-js 库(如果我错了,请纠正我):https://github.com/benjaminws/stomp-js

    ActiveMQ 使用 Stomp 支持消息组,因此您很可能会按顺序获取消息。按顺序处理它们需要您以某种方式在客户端上同步处理每条消息,当您可以控制侦听器将在多少线程中运行时,这相当简单。这可能不像 java 脚本那么容易。这不是

    据我所见,您使用的 lib 不是最完整的文档,您可以调整的唯一设置(我没有尝试过!)是将预取大小更改为 1。

    var headers = {
      destination: '/queue/test_stomp',
      ack: 'client',
      'activemq.prefetchSize': '1'
    };
    

    这个库可能仍然急切地直接开始获取下一条消息,但您可能想对其进行测试。

    另一方面,您不妨将应用程序重新设计为与序列无关,因为您正在运行 node.js 和 java 脚本。消息传递具有序列独立性总是更好,因为您可以更好地优化性能并且可以避免同步行为。

    我不知道您尝试使用相关 ID 实现什么,但该标头用于将请求与回复相关联,这里不是这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 2011-12-24
      • 2015-03-23
      • 2021-04-08
      • 2019-06-27
      • 1970-01-01
      相关资源
      最近更新 更多