STOMP-Activemq客户端有什么办法可以停止消耗消息,直到需要为止?

问题描述

我在带有ActiveMQ的node.js上使用stomp client。当前,生产者将消息推送到队列中,如果连接了客户端(消费者),则它将使用该消息。如果未连接客户端,则消息将在队列中挂起,直到或除非某些使用者连接为止。

就我而言,消费者执行的每个操作都很昂贵,最多可能需要2个小时。我要使用一条消息,然后停止使用队列中的消息,直到该操作完成。当前,一旦将消息推送到队列中,客户端就会自动从队列中提取所有消息。我想要的是拉一条消息等待其完成,然后再次从队列中拉出,依此类推。这是为了避免比赛条件。

例如,如果我在队列中有三个任务: A | B | C

当前流程是所有消息都在队列中使用,而留空。

我要消耗1条消息,即

A | B | (C被消耗了)

对C执行操作。

消费者完成所有操作后,再接受下一条消息

A | (B已消耗)

依此类推...

我使用ActiveMQ进行通信的原因是,如果节点应用程序崩溃或我的服务器关闭等情况,可以可靠地传递消息。

解决方法

使用基于ActiveMQ 5的解决方案,客户端可以配置预取大小,然后代理将使用可用消息填充预取大小。如果您在STOMP订阅上使用activemq.prefetchSize标头,并且将值设置为1,则代理将一次发送一条消息,前提是您使用了客户端或客户端个人确认模式。在您的情况下,您可以使用客户端确认,然后在处理完消息后发送ACK,然后如果有消息,则代理将调度另一条消息。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...