ideative / data_handler_queue
提供API,用于注册DataHandler数据和命令,并在稍后异步重新播放。
Requires
- ext-json: *
- typo3/cms-core: >=8.7.0,<10.0
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的作品。