【问题标题】:Symfony - Multienviroment support for EnvelopeSymfony - 对 Envelope 的多环境支持
【发布时间】:2020-04-27 07:15:51
【问题描述】:

我在 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 不会消费任何消息。

【问题讨论】:

    标签: symfony symfony4 symfony-4.3 enqueue


    【解决方案1】:

    必须设置队列和主题:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 2020-12-08
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多