activemq - JMSXGroupID/correlation-id 在 stomp 客户端上对消息进行队列似乎不起作用

标签 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,然后确认 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/

相关文章:

apache - 监控 ActiveMQ 性能的工具

jms - ActiveMQ 警告 : Frame size of 1 GB larger than max allowed 100 MB

java - 使用 Spring Boot 设置 Camel 和 Activemq

perl - 在 Perl 中使用 Net::STOMP::Client 模块通过 SSL 连接到 JMS 主题代理时出错

Activemq STOMP : detecting and clearing dead nondurable subscribers

javascript - 使用 sockjs 和 stomp 在/信息请求期间没有 cookie

java - ActiveMQ 死信队列未创建

jakarta-ee - 如何暂停/暂停消息驱动的 bean 的使用?

node.js - 带有 SockJS (NodeJS) + STOMP 客户端的 Websockets 服务器

java - 带有扇出交换的 Stomp Websocket