基于异步的plone异步任务队列
collective.taskqueue的Python项目详细描述
collective.taskqueue
collective.taskqueue 通过 为异步排队请求提供一个小框架 ZPublisher。使用这种方法,异步任务 只是对正常注册的浏览器视图(或其他 可遍历的可调用函数),它们使用pas进行身份验证 请求。
此外,还可以配置视图,使其仅对 异步请求。此外, collective.taskqueue 还附带了一个特殊的 PAS插件,将每个请求验证为排队的用户。
最小配置:
zope-conf-additional= %import collective.taskqueue <taskqueue /> <taskqueue-server />
最小配置为您提供一个易失性实例本地队列和 消费者,但不保证送货。
具有多个队列的最小配置:
zope-conf-additional= %import collective.taskqueue <taskqueue /> <taskqueue-server /><taskqueue>queue mailhost</taskqueue><taskqueue-server>queue mailhost</taskqueue-server>
redis的首选最小配置:
eggs= collective.taskqueue [redis]zope-conf-additional= %import collective.taskqueue <taskqueue> type redis unix_socket_path ${buildout:directory}/var/redis.sock </taskqueue> <taskqueue-server> name ${:_buildout_section_name_} </taskqueue-server>
redis支持为您提供可分发的队列,这些队列可以在 实例。所有实例都应具有队列特定的 <;taskqueue/>; ,但仅限于 使用实例需要 <;taskqueue server/>;
具有多个队列的redis配置示例:
eggs= collective.taskqueue [redis]zope-conf-additional= %import collective.taskqueue <taskqueue> type redis unix_socket_path ${buildout:directory}/var/redis.sock </taskqueue> <taskqueue-server> name ${:_buildout_section_name_} </taskqueue-server> <taskqueue> type redis queue mailhost unix_socket_path ${buildout:directory}/var/redis.sock </taskqueue> <taskqueue-server> queue mailhost name ${:_buildout_section_name_} </taskqueue-server>
建议只使用本地redis安装,因为 连接可能会被防火墙杀死(没有ping或heartbeat可保持 通过企业防火墙建立的连接)。
将任务排队:
fromcollective.taskqueueimporttaskqueuetask_id=taskqueue.add('/Plone/path/to/my/view')
成功的事务处理后,任务将排队(并被消耗)。
要使视图仅对异步请求可见,可以注册视图 对于特殊层collective.taskqueue.interfaces.itaskqueuelayer 仅从由 collective.taskqueue 发送的请求中找到
默认情况下, taskqueue.add 将当前请求的头复制到 异步请求。这应该足以验证 与当前请求的身份验证方式完全相同。
taskqueue.add 返回任务的类似uuid的id,该id可用于 稍后跟踪任务状态。任务id稍后作为x-task-id中的头提供 排队的请求。您可以使用self.request.getheader('x-task-id')在任务视图中获取它。
使用自定义pas插件可以实现更健壮的身份验证。 collective.taskqueue 附带一个可选安装的pas插件,该插件 将每个请求验证为排队的用户。为了达到这个目的, collective.taskqueue将x-task-user-id头附加到队列中 请求,
task queue api的灵感来自于google appengine task queue api。
自省队列
作为plone的最低异步框架, collective.taskqueue 不提供任何用于观察或内省队列的用户界面。 然而,从可信的python中,可以查找 命名队列(默认队列的名称为"default"):
fromzope.componentimportgetUtilityfromcollective.taskqueue.interfacesimportITaskQueuelen(getUtility(ITaskQueue,name='default'))
高级配置
支持的 <;taskqueue/>; -设置为:
< DL>其他受支持的redis队列选项包括: 主机 , 端口 , 数据库 和 密码
支持的任务队列服务器设置为:
< DL>此调度的请求的最大zpublisher重试计数 消费者。
< div > 注一旦zpublisher超过此限制,则 任务被永久地破坏了。(另一种行为是可能的 通过实现自定义队列类。)