我试图在节点服务器上使用 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”,但它似乎也不起作用。有人能建议更好的方法吗? 先感谢您, 钱德拉。
最佳答案
我猜你正在使用这个 stomp-js 库(如果我错了请纠正我):https://github.com/benjaminws/stomp-js
ActiveMQ 使用 Stomp 支持消息组,因此您很可能按顺序获取消息。按顺序处理它们需要您以某种方式在客户端上同步处理每个消息,当您可以控制监听器将在其中运行的线程数时,这相当简单。使用 java 脚本可能并不那么容易。这不是
据我所知,您使用的库并不是最有据可查的,您可以调整的唯一设置(我没有尝试过!)是将预取大小更改为 1。
var headers = {
destination: '/queue/test_stomp',
ack: 'client',
'activemq.prefetchSize': '1'
};
可能的情况是,该库仍然急切地直接启动以获取下一条消息,但您可能想测试它。
另一方面,您可能还想重新设计应用程序以使其与序列无关,因为您正在运行 node.js 和 java 脚本。消息传递具有序列独立性总是更好,因为您能够更好地优化性能并且可以避免同步行为。
我不知道您尝试使用相关 ID 实现什么目的,但该 header 用于将请求与回复关联起来,但此处的情况并非如此。
关于activemq - JMSXGroupID/correlation-id 在 stomp 客户端上对消息进行队列似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895200/