itx/importer

安装: 2

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:typo3-cms-extension

1.0.0 2024-08-16 07:35 UTC

This package is auto-updated.

Last update: 2024-09-16 07:52:42 UTC


README

用法

运行队列工作进程

要运行导入扩展的队列工作进程,请运行以下命令

vendor/bin/typo3cms importer:queue-worker

这将运行一个单独的队列工作进程。您可以通过运行多个队列工作进程来并行化导入,从而加快导入速度。

要使它们在多个实例中自动运行,可以使用以下命令

vendor/bin/typo3cms importer:queue-worker-manager <optional worker count>

导入数据

要创建新的导入,您需要创建 3 个文件

  1. 生产者类

    生产者类应继承自 Itx\Importer\Command\Producer\AbstractJobProducer 类。在生产者类内部,您将调用 API 来获取您想要导入的数据信息。最后,您将需要使用 generateJobs 方法来创建队列工作进程将处理的作业。

  2. 有效载荷类

    使用自定义有效载荷类将类型安全的数据传递给消费者类。此类没有 getter 和 setter。

  3. 消费者类

    消费者类将由队列工作进程调用,并需要实现 ConsumerInterface。它将接收有效载荷类作为参数。在消费者类内部,您可以使用有效载荷类中的数据将数据导入到您的数据库中。您不需要注册消费者,它将被自动检测。

当所有作业都处理完毕后,导入器将调用生产者类上的 finish 方法。使用此方法来清理临时文件或删除旧记录。

您需要将生产者类作为命令在 Service.yaml 中注册。命名方式如下

    importer:producer:<importer type name here>

请确保使用与生产者类导入类型名称方法相同的名称。

注意:如果您在其他扩展中使用导入扩展,您需要将以下配置添加到您扩展的 Services.yaml(在 _defaults 下方)

_instanceof:
    Itx\Importer\Consumer\ConsumerInterface:
        tags: [ 'queue_consumer' ]
        lazy: true
    Itx\Importer\Command\Producer\AbstractJobProducer:
        tags: [ 'queue_producer' ]
        lazy: true

就这样!您现在可以设置任意数量的队列工作进程,以及为生产者和导入配置调度任务,导入将自动执行。

竞争条件和锁定

由于每个作业都可以由运行时并行运行,因此可能会尝试多次导入相同的记录。为了防止这种情况发生,您可以使用 Itx\Importer\Service\LockingService::createLock() 方法。此方法返回一个 Lock 对象,您可以在其上调用 acquire() 方法。请确保使用 blocking=true 参数调用它。还请确保在完成时在锁对象上调用 release() 方法。锁自动配置为在进程结束时释放,但手动释放它是良好的做法。

子作业

您可以在处理作业的同时创建作业。如果您需要导入层次结构数据,这很有用。

统计信息

要为您的导入创建统计信息,您可以使用 Itx\Importer\Service\StatisticsService::addStatistic() 方法。此方法可以并行运行,并将自动为您汇总统计信息。要确保数据在不同位置,请确保为相同的数据使用相同的表名和记录名。当多次调用时,值将相加。

您可以在后端模块中查看生成的统计记录。

清理

有一个清理命令可以用来删除之前的导入及其数据。

vendor/bin/typo3cms importer:cleanup <keep number of imports>