Symfony 4 - Как создать очередь, если она не существует - PullRequest
0 голосов
/ 22 ноября 2018

Я использую Symfony Messenger Component в моем приложении Symfony 4 для связи с RabbitMQ.

# config/packages/messenger.yaml

framework:
messenger:
    transports:
        new_orders: '%env(MESSENGER_TRANSPORT_DSN)%new_orders'
        orders_progress: '%env(MESSENGER_TRANSPORT_DSN)%orders_progress'

    routing:
        'App\ValueObject\Message\OrderMessage': new_orders
        'App\ValueObject\Message\OrderProgressMessage': orders_progress

Использование в команде (только фрагмент):

# src/Command/CollectOrdersCommand.php
class CollectOrdersCommand extends Command
{
    public function __construct(MessageBusInterface $queue);

    protected function execute(InputInterface $input, OutputInterface $output): void
    {
        $msg = new OrderMessage();
        $this->queue->dispatch($msg);
    }
}

Я запускаю приложение в контейнерах Docker.Если я запускаю его с нуля, RabbitMQ пуст.Если я запускаю команду php /orders/bin/console app:collect-orders в режиме разработки, очередь создается автоматически.Однако, если я запускаю его в режиме prod php /orders/bin/console app:collect-orders -e prod, очередь никогда не создается, и команда вылетает с ошибкой «очередь не найдена».

Мое временное решение - вызвать команду один раз в началеdocker-compose runtime с параметром -e dev, что не очень приятно.

Кто-нибудь знает, как создать очередь, если она не существует?

...