【发布时间】:2020-12-27 02:02:45
【问题描述】:
我在带有 ActiveMQ 的 node.js 上使用 stomp client。目前,生产者将消息推送到队列中,如果客户端(消费者)已连接,则它会使用该消息。如果客户端未连接,则消息将在队列中挂起,直到或除非某个消费者已连接。
就我而言,消费者执行的每个操作都很昂贵,可能需要长达 2 小时。我想使用一条消息,然后停止使用队列中的消息,直到该操作完成。目前,一旦消息被推送到队列中,客户端会自动从队列中提取所有消息。我想要的是拉一条消息等待其完成,然后再次从队列中拉,依此类推。这是为了避免竞争条件。
例如,如果我在队列中有三个任务: 一个 |乙| C
当前的流程是所有消息都在队列中被消费,队列为空。
我想要的是消费 1 条消息,即
一个 |乙| (消耗C)
在 C 上执行操作。
消费者完成所有操作后,接收下一条消息
一个 | (B被消耗)
等等……
我使用 ActiveMQ 进行通信的原因是,如果节点应用程序崩溃或我的服务器关闭等情况,它可以可靠地传递消息。
【问题讨论】:
-
@JustinBertram 正在使用的包是npmjs.com/package/stomp-client
-
@JustinBertram 目前,一旦消息被推送到队列中,客户端会自动从队列中提取所有消息。我想要的是拉一条消息。等待它完成,然后再次从队列中拉取,依此类推。
-
你使用的是什么版本的 ActiveMQ?