Автоматически создавать очереди rabbitmq

Возьмем строчку из документации к Laravel:

ProcessPodcast::dispatch($podcast)->onQueue('processing');

Тут создается задача ProcessPodcast, и помещается в очередь processing. Теперь представим, что используется драйвер rabbitmq, а очереди processing в Rabbitmq нет. Задача не будет выполнена.

Первый вариант

Казалось бы, нужно зайти в админку кролика и добавить эту очередь. Но с точки зрения CI/CD так делать неправильно.

Второй вариант

Ладно, создадим миграцию (выполняется один раз) и в нее пропишем создание очереди. Но если кролик будет пересоздан с нуля, очередь пропадет.

Третий вариант

Перед отправкой сообщения в очередь будем ее создавать:

RabbitHelper::createAndBindQueue('processing'); // тут создаем очередь
ProcessPodcast::dispatch($podcast)->onQueue('processing');

Но это ужасно, потому что везде придется прописывать дополнительную строчку кода. А если проект перейдет на Redis, эту строчку придется выпиливать. Неудачно решение.

Вот пожелания.

  1. Очереди могут потеряться, и нужно их каким-то образом автоматически пересоздавать
  2. Если Rabbitmq не используется (например, phpunit тесты), очереди создавать не нужно
  3. Не хочется засорять код конструкциями типа RabbitHelper::createAndBindQueue()

Итак, как сделать правильно?


Ответы (0 шт):