ideative/data_handler_queue

提供API,用于注册DataHandler数据和命令,并在稍后异步重新播放。

安装: 473

依赖项: 0

建议者: 0

安全: 0

类型:typo3-cms-extension

0.0.5 2022-05-02 13:52 UTC

This package is auto-updated.

Last update: 2024-08-30 01:07:17 UTC


README

此TYPO3扩展提供了一个注册调用DataHandler的API。这可以是存储的数据或TCE命令。命令的实际执行或数据的存储仅在命令行控制器被调用时发生,清空存储的数据和命令队列。

这种需求源于需要执行非常密集的TCE操作,这些操作最终遇到了超时或内存限制。此扩展允许您选择每次运行多少条条目。

警告:此代码应被视为仍然是alpha版本。它是针对特定需求开发的,虽然相当通用,但可能在您的场景中失败。特别是,根据您的需求,将TCE数据和命令分成多个部分可能不合适(例如,在TYPO3数据库中创建一些相互关联的新元素,并期望所有NEW***构造都能正确解析)。

用法

使用API

在实例化适当的类后,可以使用API

$queueUtility = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Ideative\DataHandlerQueue\Utility\QueueUtility::class);
$queueUtility->store(
	'pages',
	42,
	'Zaphod Beeblebrox',
	'title'
); 

上述示例将更新页面"pages"表中记录42的标题指令为某个值("Zaphod Beeblebrox")。如果页面是新的,您将使用NEW***语法而不是数字。

对于命令,"field"参数留空,而是使用第五个参数

$queueUtility = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Ideative\DataHandlerQueue\Utility\QueueUtility::class);
$queueUtility->store(
	'tx_deathstar_domain_model_planet',
	23,
	1,
	'',
	'delete'
); 

在这种情况下,我们表示必须删除星球23。在这种情况下,"value"取决于所使用的TCE命令。

执行存储的条目

有一个命令行工具可以执行存储的TCE条目

vendor/bin/typo3 datahandlerqueue:execute --limit=200

这将执行前200个条目(条目按主键排序;我们认为最早注册的条目是需要最早执行的)。您可以省略"limit"参数,在这种情况下,条目数默认为100。

当条目执行时,它们首先在数据库中被标记为已执行("execute"字段设置为1),然后通过DataHandler传递,最后删除。这是为了设计优雅地处理崩溃(由于超时或达到内存限制)。实际上,如果脚本在通过DataHandler时崩溃,您可以看到哪些条目没有执行,并尝试再次运行它们。当然,您需要备份和恢复数据库才能安全地使用此功能。

要使标记为已执行的条目再次可用,请运行"reset"命令

vendor/bin/typo3 datahandlerqueue:reset

鸣谢

扩展图标来源于Noun Project的Kirby Wu的作品。