@devmailer

Как решить проблему с кэшированием во время работы воркера?

Есть две таблицы Users и Settings они связаны через hasMany
те настройки могу получить $user->settings
И есть некоторая абстрактная задача Job в которой необходимы для работы настройки пользователя

допустим пользователь в настройках установил что хочет получать уведомления notify = true (в базе данных это и видим если посмотреть ) и если получать где-то просто в коде то получаю тоже true но когда Job берет настройки то видит там false и если перезагрузить воркер то уже приходит true те после каждого изменения любой настройки нужно перезагружать воркеры что является бредом

воркеры запускаю через supervisor php artisan queue:work --daemon

Настройки записываю $user->settings->update(['notify' => true]);
Получаю $user->settings->notify;
или
$settings = Settings::where('user_id' => $userId)->get();
$settings->notify;

Подскажите в. чем может быть вопрос?
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
1. Разделяем понятия генерации пула на уведомление и отправитель уведомлений.
2. Допустим произошло событие Х. В систему падает событие "Х произошел, вот данные(например)"
3. События из п.2 попадают в очень (Rabbit MQ, Kafka). Их слушает генератор уведомлений.
4. Генератор уведомлений получает пул пользователей для именно этого события (он может его кэшировать на короткий период, например memcached) и создаёт задания в очередь "уведомить пользователя А о событии Х"
5. Уведомлятор просто выполняет задачи из п.4

Не за что
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы