как настроить консьюмер IBMMQ так, чтобы он забирал из очереди не все сообщения - без ограничений - которые ему хочет выдать сервер (менеджер), а как-то дозированно: по 1, 2, N и только после обработки уже вычитанных вычитывал следующие?
Соответственно, узнать длину очереди в таком состоянии воркер не может.Обработчики очередей не должны заботиться о длине очереди. Это не их ответственность. Они находятся в постоянной готовности обработать следующую задачу.
Плюс, воркер в процессе собирает статистику, и должен как-то отдать её в конце работы. Я пока что решил это таким способом: напихиваю в конец очереди N (по числу воркеров) специальных заданий останова - воркер получает такое задание, отключается от очереди и делает всё необходимое.статистику можно сохранять в СУБД, отправлять в какую-либо отдельную очередь "отчеты" и пр. (в общем обмениваться через IPC).
намертво вешает систему.в контексте микросервисов? И почему это является проблемой?
Тот получает кучу одинаковых заданийА почему нужно обрабатывать одинаковые URL повторно?
Если я отправлю в очередь 'send_push' сообщение '{post_id: 123}': , его получит консьюмер, выберет из БД 1тыс пользователейА что мешает консьюмеру брать из БД по 1000 в цикле?
dispatched
- это гарантирует что записи не будут выбраны снова.done
и так до тех пор пока не закончатся.Пока очередь не пуста
Взять с очереди сообщение/файл
Обработать