Kirill
там вообще нет ничего, кроме примеров мессенджера
Г.
начинаешь делать как в симфе и приехал
Павел
Г.
короче там по доке настройка примерно четверти того что нужно
Kirill
а, ну это возможно
Г.
и в итоге получаешь всё равно ручные очереди как будто делал это через db::select()/db::update()
Kirill
я просто глянул мельком, т.к. отдельно не юзал
Kirill
Kirill
ну хз
Kirill
я бы так и сделал просто
Kirill
ну да, один поток
Kirill
на форки потом можно поделить, если надо будет
Kirill
там же всё задача консьюмера сводится в получении инфы от источника о наличии данных и отправке на обработку (если надо)
Vlad
Приходите в декабре расскажем 🤣
Павел
Kirill
Г.
после чего и решил что надо код логики перетянуть в симфу и запускать десяток процессов consume которые сразу и работу делать будут
Kirill
если писать в блокирующем режиме, то сам понимаешь, что он не сможет ничего сделать, пока не обработает задачу
Kirill
а если реализовать кооперативную многозадачность, например на файберах, то вполне себе можно
Г.
ну я хочу писать в очередь (сендер) без обработки конечно
а потом выгребать (консюм) синхронно, правильный путь?
Kirill
так можно же получать и тупо создавать подпроцесс
Kirill
ну т.е. консьюмер будет тогда один
Kirill
который управляет процесс пулом
Г.
а, понял альтернативу. в перспективе обдумаю да
Kirill
и выполняет роль процесс менеджера
Г.
вообще сейчас мысль появилась чтобы не мержить два контейнера, костыль конечно будет, но будет же!
факторками обернуть в services.yaml мои сервисы из голого проекта, а там обращаться к ранее созданному контейнеру как синглтону и брать оттуда
Г.
это же в теории должно втащить
Г.
хотя как ты сказал с процесспулом это вроде решает прям много проблем. проект с логикой лежит в отдельной папке симфа про него не знает. консюмер создает пхп процессы из той папки где вся логика
Г.
а сам по себе симфони проект обслуживает только мессенджер и иже с ним
Г.
тогда как бы и соединять проекты не надо
Г.
но это на обдумывание, сейчас бы сделать чтобы завтра было хотя б показать чего удалось добиться
kakoi-to-noob
Г.
только не в ларавел, а в голую пыху, от ларавеля там только "ёлка"
kakoi-to-noob
пробовал прикручивать symfony/messages в yii3 , нужен psr-контейнер, могу черновой вариант скинуть как это выглядет
Kirill
Г.
если процесс пул просто создает процессы, то он не знает когда они кончатся и чем, ему плевать.
Г.
если знает и висит как форк, то вопрос стабильности остается
Kirill
например, если есть шина какая-то в рамках которой 1000 обработчиков, которые реагируют на события, то там вообще ack не будет
Kirill
ну точнее будет, перекладывается в конечном итоге в какой-нибудь клик, например
Г.
ну не тысяча, но в старом коде кронов десятка три. причем есть как пакетные задачи так и реакция на действия юзеров
Kirill
а все подщипчики просто ловят события, но никакого акноладжа не делают
Kirill
Kirill
а если это событие - другое
Г.
а ну да, если нам надо статистику считать то там не будет акноладжа точно
Kirill
ну не только стату
Kirill
например "пользователь переимновался"
Kirill
и нужно всем сервисам кинуть это событие
Г.
но в моем случае в основном я хочу перенести те действия которые при массовом наплыве юзеров должны быть сделаны позже и подчищать за собой очередь
Kirill
чтоб в своих локальных базках, где надо, словили и апнули
Kirill
Kirill
Kirill
но по идее оно в конце перекладывается в персистент
Kirill
вроде клика
Kirill
и оно уже и делает ack
Kirill
а тем, кому надо догнаться - вначале подписываются, а потом догоняются событиями из клика уже
Г.
понял... получается что-то вроде await команды которая сама по себе тоже месседж "жду подтверждения" или типа того, мозг плывет когда пытаешься понять...
Kirill
ну это относительно классическая схема в крупных энтепрайз шляпах
Kirill
когда туча команд пилят разные микро (и не очень) шляпы
Г.
ну пока не грозит. у нас тупо наплыв юзеров которые заполняют формы и хочется их всех авторизовать по ранее введенному
Г.
процесснуть и проверить можно ли. пачкой
std::mechanicus
а типа symfony_php с концами окуклился?
Михаил
Здарова ребят. К примеру у меня есть вот такой простой продьюсер в кафке.
$conf = new RdKafka\Conf();
$conf->set('metadata.broker.list', 'kafka1:9092,kafka2:9092');
$producer = new RdKafka\Producer($conf);
$topic = $producer->newTopic("test");
$topic->produce(RD_KAFKA_PARTITION_UA, 0, "Message", "key");
$producer->poll(0);
$result = $producer->flush(10000);
Как видно у меня тут 2 брокера. Если я отсылаю сообщения то прокьюсер постоянно подрубается к kafka2 (к примеру). То есть в кластере именно этот брокер является выбранным.
Если я его убью и оставлю только kafka1 - то при попытки отослать сообщения продьюссер будет пытаться подрубиться к kafka2 и соответственно постоянно терпеть неудачи.
Вопрос. А как же round-robin? А как же то, что я передела список из брокеров, почему продьюсер не подключается к ним. Причём проблема не только локальная, на проде та же ситуация, наши devops отдел говорит что проблема на стороне продьюсера. В чём может быть реальная проблема, где я что неправильно настроил
Юра
$rk->addBrokers("10.0.0.1:9092,10.0.0.2:9092");
Юра
В доке такой пример
Юра
У тебя как-то по другому
Михаил
В одной доке один пример, в другой доке другой. Прикол в том что я пробовал и так и по другому. Всё одно
https://idealo.github.io/php-rdkafka-ffi/usage/producer/
https://arnaud.le-blanc.net/php-rdkafka-doc/phpdoc/rdkafka.examples-producer.html
Михаил
<?php
$conf = new RdKafka\Conf();
$conf->set('log_level', (string) LOG_DEBUG);
$conf->set('debug', 'all');
$rk = new RdKafka\Producer($conf);
$rk->addBrokers("10.0.0.1:9092,10.0.0.2:9092");
полный пример такой, у меня если так сделать будет писаться что нужно указать metadata.broker.list или его алиас bootstrap.servers
а. да, у меня rdkafka 5.0.2
The Ant
нашол, конгфиг шторма ебучего
Алексей
The Ant
зачем ты его искал ?
Не искал, тесты по кнопке а шторме не запускались. А с терминала все ок. Оказалось шторму надо было явно указать где лежат файлы с конфигом пхпунит для проекта
Nikolay
The Ant
Ну не работало, симфа 5.4
Алексей