我在 symfony 4.3(我有多个环境(.env))中使用 enqueue-dev + messenger-enqueue-transport 和 beanstalk。
我应该如何设置它,以便来自不同环境的作业不会混合在同一个队列中?(因为 beanstalk 服务器是一样的)
我使用以下方法运行每个环境的作业:
APP_ENV=qa bin/console messenger:consume beanstalk -vvv
APP_ENV=production bin/console messenger:consume beanstalk -vvv
当我在没有 Smyfony 的情况下使用 pheanstalk 时,我只是在作业名称上添加了一个后缀,但在 symfony 中,作业是使用类设置的:
$message = new ReportMessage($reportUrl);
$this->bus->dispatch((new Envelope($message))->with(new DelayStamp(1000)));
(我的旧实现):
$this->pheanstalk->useTube(JOB_REPORT_MESSAGE . APP_ENV)->put(json_encode($data));
我试过了
config/packages/enqueue.yaml
::
enqueue:
default:
transport: '%env(resolve:ENQUEUE_DSN)%'
client:
router_topic: QA
config/packages/messenger.yaml
:
framework:
messenger:
transports:
beanstalk: enqueue://default?topic[name]=QA
还有
config/packages/enqueue.yaml
::
enqueue:
default:
transport: '%env(resolve:ENQUEUE_DSN)%'
client:
default_queue: QA
router_queue: QA
config/packages/messenger.yaml
:
framework:
messenger:
transports:
beanstalk: enqueue://default?queue[name]=QA
但是随后 messenger:consume 不会消耗任何消息。