Имеется проект на Symfony 4 с очередью сообщений RabbitMq.
Consumer запущен и слушает очередь, если пришло сообщение, то запускается команда.
Вот пример кода из одной команды:
/** @var Account $account */
$account = $this->container->get('doctrine')->getRepository(Account::class)->find($account_id);
if ($account) {
echo "account=".$account->getUsername()." active=".$account->getActive().PHP_EOL;
if ($account->getActive()) {
Проверяется, что аккаунт активен, и дальше выполняется код.
После выполнения кода, должна быть временная задержка, вот так она рассчитывается:
$count_all_account = count($this->container->get('doctrine')->getRepository(Account::class)->findBy(['active' => true]));
$second = (int)(40 / $count_all_account);
Так вот проблема в том, что если аккаунт стал неактивен, то в первой части кода, метод
$account->getActive()
выдает Истину,
а во второй части кода, где выбирается количество активных аккаунтов, этот аккаунт уже неактивен.
Если перезапустить Consumer, тогда все становится правильно.
Как решить проблему?
Может быть Symfony как-то кеширует эти данные?