在stomp客户端上排队消息的JMSXGroupID / correlation-id似乎不起作用

时间:2012-08-10 03:48:15

标签: activemq stomp

我试图使用节点服务器上的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然后ack'ing message2。我尝试使用'correlation-id',它似乎也没有用。有谁能建议更好的方法? 先感谢您, 钱德拉。

1 个答案:

答案 0 :(得分:2)

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

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

从我所看到的,你正在使用的lib并不是最好的文档,你可以调整的唯一设置(我还没试过!),是将预取大小改为1。

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

可能是这个lib仍然急切地直接启动以获取下一条消息,但您可能想要测试它。

另一方面,您可能希望重新设计应用程序以使其与序列无关,因为您运行的是node.js和java脚本。通过消息传递实现序列独立性总是更好,因为您可以更好地优化性能并避免同步行为。

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