Ответы пользователя по тегу Очереди сообщений
  • Как понять, что все сообщения в очереди обработаны?

    По мне, так для того, чтобы знать когда задача обработана, достаточно отправлять сообщение об окончании в отдельную очередь "оповещения". Обработчик очереди будет слушать ее и может запустить "агрегирующие процессы".

    Соответственно, узнать длину очереди в таком состоянии воркер не может.
    Обработчики очередей не должны заботиться о длине очереди. Это не их ответственность. Они находятся в постоянной готовности обработать следующую задачу.

    Плюс, воркер в процессе собирает статистику, и должен как-то отдать её в конце работы. Я пока что решил это таким способом: напихиваю в конец очереди N (по числу воркеров) специальных заданий останова - воркер получает такое задание, отключается от очереди и делает всё необходимое.

    статистику можно сохранять в СУБД, отправлять в какую-либо отдельную очередь "отчеты" и пр. (в общем обмениваться через IPC).
    Ответ написан
    1 комментарий
  • Как в RabbitMQ обработать все сообщения а затем удалить очередь и закрыть соединение?

    Странная затея насчёт удаления очереди.
    Ну если так надо, то отправляй сообщение о том, что окончились сообщения. Тогда обработчик очереди получит его и будет знать, что очередь можно удалять.
    Ответ написан
    Комментировать
  • Какой тип обмена использовать в этом случае?

    Если нужна доставка одного и того же сообщения нескольким сервисам, то fanout подходит.
    Если нужно разослать сообщение по разным подкатегориям по маске (скажем, регионам), то можно использовать обмен типа topic.
    https://dev.to/larapulse/dealing-with-rabbitmq-exc...
    Ответ написан
    Комментировать
  • Почему низкая скорость публикации сообщений в очередь RabbitMQ?

    Вообще, AMQP - непростой протокол и в нам есть много взаимодействий по сети. У разных реализаций протокола могут быть разные особенности, даже в пределах того же языка программирования.
    Если отправка по интернету, то вообще все может быть менее предсказуемо и соединения могут отваливаться спонтанно, что может приводить к "заморозке" или частым переподключениям.
    Не предоставлено никакой информации об:
    используемых версиях библиотек и RabbitMQ, рантайма, конфигураций сети, ... как и самого кода.
    Ответ написан
    Комментировать
  • MicroMQ и RabbitMQ очередь запросов внутри сервиса?

    Хотел бы понять что означает
    намертво вешает систему.
    в контексте микросервисов? И почему это является проблемой?

    Тот получает кучу одинаковых заданий
    А почему нужно обрабатывать одинаковые URL повторно?
    Если, конечно, сильно надо, то можно проверять в K/V хранилище на наличие ключа с таким URL , у которого ограничено время жизни. Тогда при повторном событии просто игнорировать его.

    Ну а, вообще, микросервис "Браузер" может работать только в качестве обработчика очереди, получая сообщения, отправленные REST API. Сам же просто складывать в своем темпе результаты сканирования URL в СУБД, а REST API будет проверять наличие в той же СУБД и сообщать результаты клиенту, если готово.
    Ответ написан
  • Повторный запуск Laravel job'ов. Как побороть?

    Логи должны указать на причину происходящего. Возможно, имеется проблема с соединением к Redis (СУБД доступна?) и тогда есть безуспешные 3 попытки.
    Ответ написан
    Комментировать
  • Как завернуть HTTP запросы в очереди сообщений?

    Выполнять задачи в очереди можно если задачи могут выполняться отложенно. При обработке в очереди нет гарантии выполнения в заданный срок времени и механизмы взаимодействия при этом усложняются.
    Для управления нагрузкой в пиковое время необходимо горизонтально масштабировать экземпляры приложения при повышении нагрузки сверх заданного лимита. По ходу, может понадобиться масштабирование СУБД.
    Ответ написан
    Комментировать
  • Как обрабатывать задачи группами?

    Если я отправлю в очередь 'send_push' сообщение '{post_id: 123}': , его получит консьюмер, выберет из БД 1тыс пользователей
    А что мешает консьюмеру брать из БД по 1000 в цикле?
    Ответ написан
  • Очереди, или достать job и удалить сразу?

    Один процесс-диспетчер периодически проверяет наличие необработанных записей и кладет в очередь массив первичных ключей размером в 50 записей.
    Т.е. процесс делает выборку 50 необработанных записей, кладет в очередь и так до тех пор пока не останется меньше 50. Просыпается через некоторое время и повторяет этот процесс заново.
    На обрабатываемые записи нужно ставить метки типа dispatched - это гарантирует что записи не будут выбраны снова.
    Воркеры берут каждый свою задачу с массивами pk, обрабатывают их и помечают записи статусом done и так до тех пор пока не закончатся.
    А можно и без диспетчера обойтись. Главное, помечать статусом записи.
    Ответ написан
    Комментировать
  • Чем лучше забирать сообщения из очереди IBM MQ (сервер - Linux Debian 9)?

    Так ничего сложного ведь
    Пока очередь не пуста
      Взять с очереди сообщение/файл
      Обработать
    Ответ написан
  • Какая бд лучше подойдёт для реализации очереди?

    А можно не городить огород, а использовать ZeroMQ/RabbitMQ/Beanstalkd/...
    или, возможно, обойтись без очередей.
    Ответ написан
    Комментировать