首页 > 解决方案 > 不同的消费者从队列中消费相同的消息,在这种情况下,消费者代码是一个耗时的过程,因此可能无法及时确认

问题描述

我有一个消费者进程必须做繁重的工作,这是一个需要 30 多秒才能完成的进程。当过程成功完成时,我们会确认该消息。但是,看起来队列正在等待确认,并且由于它没有及时收到确认,它会将消息放回队列,并且相同的消息被其他消费者实例使用。有没有我可以调整的配置?我不想自动确认消息,因为它是一个重要流程,并且集群的自动缩减可能会导致消息丢失。

我正在寻找是否有任何配置可以帮助我或者我的理解不正确?我不希望同一条消息被多个消费者消费。我们在此实例中使用 IBM MQ。

标签: javaspring-bootrabbitmqqueueibm-mq

解决方案


但是,看起来队列正在等待确认,并且由于它没有及时收到确认,它会将消息放回队列,并且相同的消息被其他消费者实例使用。

队列和队列管理器本身都不会将消息放回队列。该规则有一个例外,那就是客户端应用程序崩溃。如果队列管理器确定应用程序已崩溃,则它将消息回滚到队列。

或者您是说如果发送应用程序在指定时间内没有收到确认,那么它会重新发送相同的消息?如果是这种情况,则告诉发送应用程序将等待时间增加一倍或三倍。


推荐阅读