java - 不同的消费者从队列中消费相同的消息,在这种情况下,消费者代码是一个耗时的过程,因此可能无法及时确认
问题描述
我有一个消费者进程必须做繁重的工作,这是一个需要 30 多秒才能完成的进程。当过程成功完成时,我们会确认该消息。但是,看起来队列正在等待确认,并且由于它没有及时收到确认,它会将消息放回队列,并且相同的消息被其他消费者实例使用。有没有我可以调整的配置?我不想自动确认消息,因为它是一个重要流程,并且集群的自动缩减可能会导致消息丢失。
我正在寻找是否有任何配置可以帮助我或者我的理解不正确?我不希望同一条消息被多个消费者消费。我们在此实例中使用 IBM MQ。
解决方案
但是,看起来队列正在等待确认,并且由于它没有及时收到确认,它会将消息放回队列,并且相同的消息被其他消费者实例使用。
队列和队列管理器本身都不会将消息放回队列。该规则有一个例外,那就是客户端应用程序崩溃。如果队列管理器确定应用程序已崩溃,则它将消息回滚到队列。
或者您是说如果发送应用程序在指定时间内没有收到确认,那么它会重新发送相同的消息?如果是这种情况,则告诉发送应用程序将等待时间增加一倍或三倍。
推荐阅读
- python - Python Pandas 从每天开始的时差
- php - 过时的 WordPress 主题选项;jQuery 错误
- html - 对齐字体真棒图标和段落
- python - 无论如何要在过去 24 小时内修改文件而不遍历目录中的所有文件
- algorithm - 仍在研究这个问题并且不知道这个解释甚至意味着什么
- graphics - 了解 Vulkan 概念:交换链、帧缓冲区
- java - 不要在 ViewPager2 中保存片段状态
- javascript - 使用office.js获取excel工作簿的xml
- java - 为什么我的窗口左角有一个奇怪的白色矩形?
- css - SVG textLength 在文本前添加间距