idci/task-bundle

Symfony 任务包

安装: 450

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 1

开放问题: 21

类型:symfony-bundle

v2.5.4 2019-09-27 12:03 UTC

README

此包的目的是提供一个简单的方式来异步处理CPU密集型脚本。您可能习惯于使用cron作业来解决这类问题。此包使用RabbitMQ,更有效地解决了这些问题。CPU密集型脚本称为一个操作。为了跟踪操作,此包使用monolog将操作日志存储在MongoDB中。如果您想了解此包的工作原理,您需要了解RabbitMQ的基本知识。

简介

术语表

  • 一个 extract_rule 指的是一个symfony服务,用于检索数据数组。将为数组的每个项目创建一个任务。
  • 一个 action 是一个执行任何您想要的工作的服务。它可以由之前定义的顺序(我们称之为工作流)中的其他操作触发。
  • 一个 workflows 指的是操作如何链接在一起。您可以使用依赖于先前操作结果的条件来触发一个操作或另一个操作。
  • 一个 task 指的是一个提取数据并链接在一起的操作集合。它是一个Mongo文档,可以在操作失败时恢复操作。
  • 通过这些,我们可以组合一个 task configuration 来定义任务的创建和处理方式。

简单架构

以下是一个简单的架构,有助于了解任务的创建和处理过程。每个箭头可以表示一个发送并消费的RabbitMQ消息。

Simple schema

RabbitMQ中的任务生命周期

任务可以通过两种不同的方式创建。处理器服务是这个包的入口点。有关详细信息,请参阅文档中的"如何运行任务" 部分。

一个包含一些(或没有)要处理的数据的单个操作

Task lifecycle

  • 1 - task producer 发送一个包含操作名称和一些数据(或没有数据)的消息。
  • 2 - task consumer 从这些数据创建一个单一的任务,并使用 action producer 发送创建的任务。
  • 3 - action consumer 检索任务以运行单个操作。

具有工作流和多个操作的复杂配置

Task lifecycle

  • 1 - extract_rule producer 将提取规则服务的名称发送到RabbitMQ。
  • 2 - extract rule consumer 提取数据,并使用 task producer 发送包含数据数组的消息。
  • 3 - task consumer 为提取数据数组中的每个项目创建任务,并使用 action producer 发送创建的任务。
  • 4 - 操作消费者读取配置以根据工作流运行操作。一个操作可以导致另一个操作,或者只是结束进程。

安装

在您的composer.json文件中添加依赖项

"require": {
    ...,
    "idci/task-bundle": "dev-master",
}

在您的应用程序内核中启用组件

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle(),
        new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
        new IDCI\Bundle\TaskBundle\IDCITaskBundle(),
    );
}

导入组件配置

# app/config/config.yml

imports:
    - { resource: @IDCITaskBundle/Resources/config/config.yml }

更新您的参数.yml文件

application_name: 'Task Runner'
task_database_host: localhost
task_database_port: ~
task_database_name: task_manager
task_database_user: dbuser
task_database_password: dbpwd
task_rabbitmq_host: localhost
task_rabbitmq_port: 5672
task_rabbitmq_user: user
task_rabbitmq_password: password
task_rabbitmq_lazy: false
task_rabbitmq_vhost: /
task_mongo_database_name: task
task_mongo_database_host: 'mongodb://127.0.0.1:27017'

运行测试

安装组件依赖项

$ make composer-update

以执行单元测试

$ make phpunit