8 - 如何从模块覆盖 DatabaQueue

8 - How to override the DatabaQueue from module

我必须覆盖 Drupal 8 中 DatabaseQueue 的默认实现。这样做的原因并不重要。

我在查看 QueueFactory 时了解到每个队列 worker 可以有不同的 QueueInterface 实现。如果未指定,它们会退回到 DatabaseQueue(事实上,可以指定不同的队列 factory,但无论如何这种简化都非常准确)。

QueueFactory 使用 Settings 对象作为队列的配置源:

$this->settings->get('queue_service_' . $name, $this->settings->get('queue_default', 'queue.database'));

问题是(据我所知)Settings 对象从 sites/*/settings.php 文件获取配置数据。事实上,如果我用队列配置扩展这个文件,就像这样:

$settings['queue_service_my_custom_queue_worker'] = 'my_module.my_custom_queue_factory';

然后它工作正常。

但这就是交易。我正在创建一个将分发给许多客户的模块。这种编辑 settings.php 文件的方法并不理想。想象一下,要求每个人都做出这种改变。它很容易出错。那么,有没有办法从我的模块扩展这些设置?

我尝试使用 configuration overrides,但它不适用于这种情况。

您可以修饰 queue 服务,为您的自定义队列提供其 get() 方法的自定义行为。

查看此文档:https://www.phase2technology.com/blog/using-symfony-service