8-如何从模块覆盖DatabaQueue

时间:2019-07-17 11:14:09

标签: drupal drupal-8

我必须重写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,但在这种情况下不起作用。

1 个答案:

答案 0 :(得分:2)

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

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