• Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Everything_is_not_so_bad
    достаточно отправлять сообщение об окончании в отдельную очередь "оповещения".

    В моём случае это избыточно, достаточно использовать счётчик.

    Решение, бывшее на старте, частично страдало от опыта предыдущего, однопоточного подхода: получил пачку заданий, в цикле обработал, потом подвёл итоги. С появлением параллельной обработки этот опыт стал непригоден, но от инерции мышления избавиться трудно
    Написано
  • Почему страницы раздела перенаправляет на 404?

    denism300, извиняюсь - почему-то был уверен, что это сработает. Тогда только кастомизацией компонента.
    Ещё в свежем Битриксе появился роутинг - но сам я для страниц его не пробовал
    Написано
  • Как сделать чтобы разные субдомены вели на разные порты одного ip адреса?

    astar7922, я тогда не понимаю, зачем Вы вообще связались с портами, если на работе реализовано правильно? В моём представлении, на такое ( порты ) надо только посмотреть в документации и идти дальше, поскольку сейчас это не нужно практически нигде. Если уж хочется настроить что-то с портами - 80 и 443 вполне достаточно.
    Написано
  • Как найти в массиве ответа API нужное значение, при том что значение может быть написано в разном регистре?

    ALsv32, Вы не цепляйтесь к "правильному" написанию названия ( "Красноярск", "Нижний Новгород" ). Для поиска прекрасно подойдут и "красноярск" или "нижний новгород".
    Написано
  • Как сделать чтобы разные субдомены вели на разные порты одного ip адреса?

    astar7922,
    я правильно понимаю, если у меня там крутится apache, пару докеров на разных портах я "перед ними" еще просто ставлю ngnix в режиме реверс-прокси и уже он раскидывате?
    почитаю. спасибо!

    Если доступ к изменению конфигов есть - то даже nginx не нужен ( хотя я бы предпочёл выкинуть апач ). Просто выкидываете из своей конструкции порты и используете только Name-based Virtual Hosts
    Написано
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    когда задачи по факту выполнены, но весь процесс остановится, так как счетчик не заполнится полностью.

    В моём случае остановка на 5 минут - не страшно. ( Но для кого-то ещё, кто увидит это обсуждение, может быть важным, так что спасибо за замечание ).

    я так понимаю это не вариант, т.к. в очереди могут быть задачи из другой новой группы

    опять же, я прикинул - в моём случае это нормально. Было бы плохо, если бы задания прилетали в очередь достаточно плотно, но в моей реальности этого нет.

    Это понятно, но и воркер должен работать так, что при повторной обработке задачи не было проблем.

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

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    Если поставим инкрементацию кол-ва выполненных до финализации задачи в очереди, то при сбоях в воркере (если он упал после инкрементации, но до финализации задачи) кол-во выполненных может быть больше реального кол-ва задач, некрасиво, но работу не нарушит.

    Тут только 2 варианта последовательности действий воркера:
    1) увеличить свой счётчик, затем сообщить брокеру, что задача готова;
    2) сообщить брокеру, что задача готова, затем увеличить свой счётчик.
    На мой взгляд, второй вариант выглядит "более правильным". Но тогда возможна ситуация, когда сумма счётчиков будет меньше, чем количество выполненных задач.
    В менеджер можно добавить такой вариант: если сумма счётчиков не меняется в течение какого-то времени, то спросить у брокера количество задач в очереди. Если там ноль, то можно считать, что все задачи выполнены.

    Т.е. повторное выполнение той же самой задачи воркером никак не должно нам мешать.

    Это добавляет баллов второму варианту. В нём, если воркер упал до того, как сообщить брокеру, что задача выполнена, счётчик не увеличится.

    Главное проработать возможные ошибки, если воркер вылетел на середине задачи, а затем начал ее сначала.

    За это отвечает брокер - если по таймауту задача не подтверждена, она автоматически возвращается в очередь. Это была одна из причин, почему я выбрал beanstalk, а не Redis Pub/Sub ( у Redis сейчас заявлен новый механизм, Streams , но мне он показался сложнее )

    обычно цена со скидкой высчитывается "на лету"

    Обычно да. Но это Битрикс...
    Написано
  • Как вывести основной раздел инфоблока и его элементы?

    по-хорошему, все эти подразделы не нужны. Нагрузка, размер колёс и всё остальное - это свойства элементов, в публичной части можно использовать штатный комплексный компонент каталога, в котором есть коробочный фильтр.
    А если нужны отдельные страницы с ЧПУ - например, "найнеры", то есть решение типа этого
    Написано
  • Как в Drupal 10 массово проставить noindex для >1000 страниц?

    а что Вас сдерживает? для скрипта 1000 записей - мелочь
    Написано
  • Как принять данные от JQuery.ajax на сервере php?

    EvgenyApMr, что-то мне подсказывает, что если сделать так:
    - $data = stripcslashes($_POST['form']['dataJSON']);
    + echo $_POST['form']['dataJSON']; die();
    $dataJS = json_decode($data, true);
    echo "res: ".$dataJS['day'];

    то никаких ненужных слешей Вы не увидите. Значит, и добавлять строчку со stripcslashes() было не нужно.
    (мою отладку потом, разумеется, тоже нужно убрать)
    Написано
  • Как принять данные от JQuery.ajax на сервере php?

    EvgenyApMr, легко. Удалите строку с stripcslashes() в своём редакторе кода.
    Написано
  • Регулярное выражение поиск по группам или нет?

    Виктор,
    добавление \K стирает то, что не в группе,

    Оно ничего не стирает, а делает сброс буфера. Так что это одноразовый приём.

    Автор вопроса, судя по всему, не использует это для каких-то преобразований, только для поиска и просмотра глазами.
    Написано
  • Бизнес процесс и кастомные поля список. Как забрать выбранные значения из поля?

    я бы хранил результаты как поля в той сущности, над которой Вы запускаете БП. Например, у меня есть сущность "заявка" - элемент инфоблока, у этого инфоблока есть свойство "статус". Один БП отработал, поменяв значение свойства. Другой БП запустился - если значение свойства "статус" == X, то что-то сделал и поменял "статус" на новое значение.
    Но у меня вот так построено; может, Вам не подойдёт.
    Написано
  • Почему пишет что нет сайта если он есть?

    я даже на ноутбуке не могу прочитать, что там на скриншоте изображено...
    Написано
  • Почему возникает JSON error: Syntax error [4]?

    Александр, продублируйте в ответ к вопросу, пожалуйста.
    Написано
  • Регулярное выражение поиск по группам или нет?

    Jimm24, решение от dodo512 прикольное, но для более сложных случаев посмотрите выдачу про "regex незахватывающие группы"
    Написано
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Что подразумевается под агрегатными задачами?

    скидки на товары. В каждой скидке свой перечень товаров, и если цены на какие-то товары из перечня поменялись, то скидку надо "пересчитать". ( сходу не скажу, почему). Из дизайна видно, что расточительно пересчитывать скидку после изменения каждого товара, который в неё входит; лучше дождаться всех изменений по товарам, и только после этого пересчитывать скидки.
    Написано
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    Также, из-за того что эти задания не предназначены определенному воркеру, то один воркер может обработать 2 задания-стопера

    Нет, к счастью, не может. воркер способен обрабатывать только одно задание за раз, и там всё так примитивно, что он точно завершится. Я бы скорее опасался сценария, что воркер почему-то не смог сообщить брокеру, что он обработал стоппер - тогда beanstalkd вернёт это задание в очередь по таймауту, и в очереди станет больше стопперов, чем живых воркеров.
    Написано
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    В варианте с заданием-стопером вы создаете зависимость между брокером и воркерами, брокер должен всегда точно знать сколько работает воркеров.

    Нет, брокер (beanstalkd) знает, сколько воркеров, но не умеет ставить задания. ( не буду дальше позориться и рассказывать устройство, и так вижу, что тут коряво вышло) . Но Вы правы, тут могла быть проблема из-за несоответствия количества воркеров и заданий-стопперов в очереди.

    Теперь вижу, что подход в целом неверный. Если я боюсь утечек памяти, надо было брать пример с Апача: Менеджер мониторит количество воркеров и запускает новые, если нужно, а воркер обрабатывает фиксированное число заданий ( тысячу, 10 тысяч ) и завершается. Если хочется принудельно завершить воркера, надо смотреть в сторону сигналов.
    Написано
  • Как понять, что все сообщения в очереди обработаны?

    Mausglov
    @Mausglov Автор вопроса
    Vitsliputsli,
    Или, например, некий менеджер, который будет собирать информацию с воркеров

    Этот момент мне неясен. В моём представлении, это так:
    1) есть некое оперативное хранилище ( например, Redis )
    2) Паблишер туда пишет: "я поставил N заданий". И закончил работу.
    3) Каждый Воркер в то же хранилище пишет свой инкрементный счётчик, сколько заданий он сделал.
    4) Менеджер работает параллельно воркерам и считает сумму их счётчиков. Как только сумма сошлась с числом от паблишера, все задания обработаны.
    Так?
    Написано