跳转到主要内容

SENAITE的异步任务插件

项目描述

SENAITE LIMS的异步任务队列

https://img.shields.io/pypi/v/senaite.queue.svg?style=flat-square https://img.shields.io/travis/senaite/senaite.queue/master.svg?style=flat-square https://readthedocs.org/projects/pip/badge/ https://img.shields.io/github/issues-pr/senaite/senaite.queue.svg?style=flat-square https://img.shields.io/github/issues/senaite/senaite.queue.svg?style=flat-square https://img.shields.io/badge/Made%20for%20SENAITE-%E2%AC%A1-lightgrey.svg

关于

此插件为SENAITE LIMS启用异步任务,允许在负载高时更好地处理并发动作和进程。特别适用于高需求实例和需要长时间完成的自定义进程。基本上,senaite.queue通过异步处理任务,以无人值守和顺序的方式降低了事务提交的机会。

安装后,此插件启用了对那些通常在性能方面有更大影响并且有最高事务冲突可能性的任务的异步处理

  • 分析分配到工作表

  • 将工作表模板分配给工作表

  • 使用工作表模板创建工作表

  • 分配给工作表的分析的工作流动作(提交、验证等)

  • 在创建客户联系人时递归分配权限

此插件既不提供对样本级别工作流转换/动作的支持,也不提供样本创建的支持。但是,此插件可以轻松扩展以满足额外要求。

文档

贡献

我们希望向SENAITE.QUEUE的贡献是愉快、令人愉快和有教育意义的,对任何人都是如此。此项目遵守贡献者公约

参与本项目即表示您同意遵守本行为准则。请举报任何不可接受的行为。

贡献不仅限于拉取请求和提交。虽然我们喜欢给您机会在SENAITE.QUEUE上留下您的印记,但我们也非常高兴接收各种其他贡献。

请阅读向senaite.queue文档贡献

如果您希望进行翻译方面的贡献,请查看Transifex上的项目网站。

反馈和支持

许可证

SENAITE.QUEUE 版权所有 (C) 2019-2020 RIDING BYTES & NARALABS

本程序是自由软件;您可以按照自由软件基金会发布的GNU通用公共许可证第二版的条款重新分发和/或修改该程序。

本程序的分发是希望它对您有用,但没有任何保证;甚至没有关于其适销性或适用于特定用途的暗示性保证。有关详细信息,请参阅GNU通用公共许可证。

发行说明

从1.0.1更新到1.0.2

在版本1.0.2中,已更改队列任务的旧版存储,并且不再需要辅助存储(例如,用于工作表)。也不再使用IQueued标记接口。大部分基础代码已重构,考虑到以下目标

  • 减少复杂性:更少的代码,更好的代码

  • 减少事务提交冲突的可能性

  • 提升性能:更好的体验,无延迟

这些更改还使插件更容易扩展和维护。缺点是,不再使用旧版存储,因此,在升级之前排队的任务将被丢弃。

  • 在升级之前,请确保队列中没有剩余的任务

  • 如果您有自己的扩展senaite.queue的插件,请在审查更改时检查是否需要修改您的插件的一些部分

已引入队列服务器。因此,建议使用两个zeo客户端:一个作为服务器,至少另一个负责消费任务。此外,此版本现在依赖于三个额外的包:requestssenaite.jsonapicryptography。请阅读安装说明并运行buildout以下载依赖项。

安装

强烈建议在ZEO模式下设置SENAITE实例,因为此插件特别适用于使用预留的zeo客户端作为队列服务器并至少有一个额外的zeo客户端用于任务消费的情况。

在独立安装中,只能使用一个CPU/CPU核心来处理请求,并且线程数量有限(通常为2)。在ZEO模式下设置,数据库可以同时由多个zeo客户端使用,每个客户端使用自己的CPU。有关更多信息,请参阅可扩展性和ZEO

在SENAITE实例中创建一个新的预留用户(在/senaite/acl_users下)。推荐用户名为queue_consumer

此用户将被用于消费者以顺序方式从队列服务器中弹出任务。消费者最终将处理任务,但作为最初触发该过程的用户。然而,负责调度的预留用户必须拥有足够的权限。将此用户分配到“网站管理员”组或“管理员”组。

首先,在您的buildout配置文件的eggs部分添加此插件

[buildout]

...

[instance]
...
eggs =
    ...
    senaite.queue

然后,在您的buildout配置中添加两个客户端(一个消费者和一个服务器)

# Reserved user for dispatching queued tasks
# See https://pypi.ac.cn/project/senaite.queue
queue-user-name=queue_consumer
queue-user-password=queue_consumer_password

parts =
    ....
    queue_consumer
    queue_server

并配置两个预留客户端

[queue_consumer]
# ZEO Client reserved for the consumption of queued tasks
<= client_base
recipe = plone.recipe.zope2instance
http-address = 127.0.0.1:8089
zope-conf-additional =
    <clock-server>
        method /senaite/queue_consume
        period 5
        user ${buildout:queue-user-name}
        password ${buildout:queue-user-password}
        host localhost:8089
    </clock-server>

[queue_server]
# ZEO Client reserved to act as the server of the queue
<= client_base
recipe = plone.recipe.zope2instance
http-address = 127.0.0.1:8090

在大多数情况下,此配置就足够了。然而,senaite.queue支持多消费者,这对那些具有极高负载的SENAITE安装非常有用。要添加更多消费者,请添加所需数量的zeo客户端部分,并添加额外的< cite>clock-server zope配置。不要忘记正确设置所有这些的< cite>host值,因为此值用于队列服务器在请求任务时识别消费者。

队列服务器支持的并发消费者最大数量为4。

随后运行bin/buildout。使用此配置,buildout将从Pypi下载并安装最新发布的senaite.queue版本。

buildout完成后,启动客户端

$ sudo -u plone_daemon bin/client1 start
$ sudo -u plone_daemon bin/queue_server start
$ sudo -u plone_daemon bin/queue_client start

然后访问您的SENAITE网站,并使用具有“站点管理员”权限的用户登录以激活插件

http://localhost:8080/senaite/prefs_install_products_form

激活后,转到站点设置 > 队列设置,在“队列服务器”字段中输入充当队列服务器的zeo客户端的URL。

http://localhost:8090/senaite

更改日志

1.0.3 (2021-07-23)

  • #21改进重新索引安全对象过程

  • 当当前线程是消费者时跳过保护检查

  • 使具有WST分配的WS创建更高效

  • 固定cryptography==3.1.1

  • 修复客户端的队列任务在“排队”状态时未更新为“运行”

1.0.2 (2020-11-15)

  • 支持多消费者(最多4个并发进程)

  • 为队列服务器和客户端添加了JSON API端点

  • 队列服务器客户端实现,无需注释

  • 添加了具有对称加密的PAS插件进行身份验证

  • 将链接联系人到用户时的重新索引对象安全委托给队列

  • #7 允许排队通用工作流操作,无需特定适配器

  • #7 重构和更好的性能

  • #6 允许任务优先级排序

  • #5 不能对带有排队作业的工作表执行操作

1.0.1 (2020-02-09)

  • 允许手动将用户名分配给要排队的任务

  • 支持失败的任务

  • 当max_seconds_unlock的值太低时发出通知

  • #3 新的queue_tasks视图,列出任务和统计信息

  • #2 为失败的任务添加max_retries设置

  • #1 添加示例保护以防止排队分析的转换

1.0.0 (2019-11-10)

第一个版本

由以下组织支持