2

我试图在节点服务器上使用 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',但它似乎也不起作用。任何人都可以提出更好的方法吗?提前谢谢你,钱德拉。

4

1 回答 1

2

我猜你正在使用这个 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 来实现什么,但该标头用于将请求与回复相关联,这里不是这种情况。

于 2012-08-11T21:27:45.583 回答