Я бы посоветовал вам попробовать небольшой тест, как показано ниже, чтобы понять это поведение очередей FIFO.
- Создание очереди FIFO для целей тестирования
- Отправка двух сообщений в очередь
- Вызов API-интерфейса получения сообщений из очереди.Вы должны получить первое сообщение, которое вы ввели в очередь
- Несколько раз вызывать API получения сообщений, и для последующих попыток вы получите пустые ответы.Через 30 секунд (время ожидания видимости) вы получите то же сообщение, если вызовете API получения сообщений.Однако вы никогда не получите второе сообщение из очереди.
- Удалите сообщение, полученное на шаге 3
- Вызовите API получения сообщений, и вы должны получить второе отправленное сообщениев очередь
Причина, по которой ваш потребитель очереди получает пустые ответы для API получения сообщений, заключается в том, что потребитель очереди не удалил полученное сообщение после его обработки.Если в вашу очередь FIFO доставлены другие сообщения, а уже доставленное сообщение не удалено, это может нарушить гарантию «Первая доставка - первая доставка» .Потому что второе сообщение может быть обработано до обработки первого сообщения.Это поведение становится более очевидным, если учесть ситуацию, в которой есть несколько потребителей очереди.
В заключение я бы предложил рассмотреть возможность удаления сообщения в качестве уведомления в очередь FIFO, чтобы указать, что потребитель очереди имеетсообщение успешно обработано, и очереди FIFO разрешено доставлять следующее сообщение в очередь.Чтобы исправить код клиента, вы можете изменить его, чтобы удалить сообщение после его успешной обработки.