我在Symfony 4应用程序中使用Symfony Messenger Component与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
,则会自动创建队列。但是,如果我以生产模式php /orders/bin/console app:collect-orders -e prod
运行它,则永远不会创建该队列,并且该命令会因“找不到队列”错误而崩溃。
我的临时解决方案是在docker-compose运行时的开始使用-e dev
参数调用一次命令,这不是很好。
有人知道如何创建不存在的队列吗?