Автоматически создавать очереди rabbitmq
Возьмем строчку из документации к Laravel:
ProcessPodcast::dispatch($podcast)->onQueue('processing');
Тут создается задача ProcessPodcast, и помещается в очередь processing. Теперь представим, что используется драйвер rabbitmq, а очереди processing в Rabbitmq нет. Задача не будет выполнена.
Первый вариант
Казалось бы, нужно зайти в админку кролика и добавить эту очередь. Но с точки зрения CI/CD так делать неправильно.
Второй вариант
Ладно, создадим миграцию (выполняется один раз) и в нее пропишем создание очереди. Но если кролик будет пересоздан с нуля, очередь пропадет.
Третий вариант
Перед отправкой сообщения в очередь будем ее создавать:
RabbitHelper::createAndBindQueue('processing'); // тут создаем очередь
ProcessPodcast::dispatch($podcast)->onQueue('processing');
Но это ужасно, потому что везде придется прописывать дополнительную строчку кода. А если проект перейдет на Redis, эту строчку придется выпиливать. Неудачно решение.
Вот пожелания.
- Очереди могут потеряться, и нужно их каким-то образом автоматически пересоздавать
- Если Rabbitmq не используется (например, phpunit тесты), очереди создавать не нужно
- Не хочется засорять код конструкциями типа
RabbitHelper::createAndBindQueue()
Итак, как сделать правильно?