我必须重写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,但在这种情况下不起作用。
答案 0 :(得分:2)
您可以修饰queue
服务,以为您的自定义队列提供其get()
方法的自定义行为。
查看此文档:https://www.phase2technology.com/blog/using-symfony-service