Я использую 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
, что не очень приятно.
Кто-нибудь знает, как создать очередь, если она не существует?