Symfony - Поддержка Multienviroment для Envelope - PullRequest
0 голосов
/ 27 апреля 2020

Я использую enqueue-dev + messenger-enqueue-transport в symfony 4.3 (где у меня несколько окружений (.env)) с beanstalk.

Как мне настроить его так, чтобы задания из разных Окружающая среда не смешивается в одной и той же очереди? (поскольку сервер beanstalk один и тот же)

Я запускаю задания каждой среды, используя:

APP_ENV=qa bin/console messenger:consume beanstalk -vvv
APP_ENV=production bin/console messenger:consume beanstalk -vvv

Когда я использовал pheanstalk без Smyfony, я просто добавил суффикс к имени задания, но в 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

Но тогда никакие сообщения не потребляются мессенджер: потреблять

.

1 Ответ

0 голосов
/ 30 апреля 2020

Обе очереди и топи c должны быть установлены:

config / packages / enqueue.yaml:

enqueue:
    default:
        transport: '%env(resolve:ENQUEUE_DSN)%'
        client:
            default_queue: QA
            router_queue: QA
            router_topic: QA

config / packages / messenger.yaml:

framework:
   messenger:
    transports:
        beanstalk: enqueue://default?queue[name]=QA&topic[name]=QA
...