bazilio/yii2-async
Composer 安装命令:
composer require bazilio/yii2-async
包简介
Provides translucent api for moving large tasks out of request context
README 文档
README
Provides translucent api for moving large tasks out of request response
Install: php composer.phar require bazilio/yii2-async:dev-master
Requirments:
- php >=5.4
- Transports:
yii\db\Connection- php-amqp
- yii2-redis
Using with AMQP:
php composer.phar require pdezwart/php-amqp:dev-master
main.php:
'components' => [ 'async' => [ 'class' => 'bazilio\async\AsyncComponent', 'transportClass' => 'bazilio\async\transports\AsyncAmqpTransport', 'transportConfig' => [ 'host' => 'localhost', 'login' => 'guest', 'password' => 'guest', 'vhost' => 'yii', 'exchangeName' => 'yii' ] ] ]
Using with Redis:
php composer.phar require yiisoft/yii2-redis:*
main.php:
'components' => [ 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => 'localhost', 'port' => 6379, 'database' => 0, 'dataTimeout' => -1, // important for daemon and blocking queries ], 'async' => [ 'class' => 'bazilio\async\AsyncComponent', 'transportClass' => 'bazilio\async\transports\AsyncRedisTransport', 'transportConfig' => [ 'connection' => 'redis', ] ] ]
Using with MySQL (probably any sql, but tested only with mysql)
main.php:
'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2advenced', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], 'async' => [ 'class' => 'bazilio\async\AsyncComponent', 'transportClass' => 'bazilio\async\transports\AsyncMysqlTransport', 'transportConfig' => [ 'connection' => 'db', ] ] ]
Apply migrations:
./yii migrate/up --migrationPath=@vendor/bazilio/yii2-async/migrations
Usage:
Create and send:
Test class example:
class DownloadTask extends AsyncTask { public $url; public $file; public static $queueName = 'downloads'; public function execute() { return file_put_contents($this->file, file_get_contents($this->url)); } } // create task $task = new DownloadTask(['url' => 'http://localhost/', 'file' => '/tmp/localhost.html']); \Yii::$app->async->sendTask($task);
Or call external method:
$task = new AsyncExecuteTask([ 'class' => 'common\components\MyDownloaderComponent', 'method' => 'download', 'arguments' => ['url' => 'http://localhost/', 'file' => '/tmp/localhost.html'] ]); $task::$queueName = 'downloads'; if (YII_ENV !== 'prod') { $task->execute(); } else { Yii::$app->async->sendTask($task); }
Execute:
Bash way:
Fill console config:
'controllerMap' => [ 'async-worker' => [ 'class' => 'bazilio\async\commands\AsyncWorkerCommand', ], ],
Run:
# Process and exit on finish ./yii async-worker/execute downloads # Process and wait for new tasks (only redis) ./yii async-worker/daemon downloads
Code way:
while ($task = \Yii::$app->async->receiveTask('downloads')) { if ($task->execute()) { \Yii::$app->async->acknowledgeTask($task); } }
For more code examples look into tests:
Runing tests:
vendor/bin/codecept run
Or in Docker:
./test.sh
bazilio/yii2-async 适用场景与选型建议
bazilio/yii2-async 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 50.01k 次下载、GitHub Stars 达 62, 最近一次更新时间为 2014 年 07 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「redis」 「rabbitmq」 「AMQP」 「Tasks」 「async」 「yii2」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 bazilio/yii2-async 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 bazilio/yii2-async 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 bazilio/yii2-async 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Queue
Work with RabbitMQ in Laravel.
Microservice RPC through message queues.
PHP AMQP Binding Library
The Listener component of the RabbitEvents library.
The Publisher component of the RabbitEvents package.
统计信息
- 总下载量: 50.01k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 62
- 点击次数: 19
- 依赖项目数: 3
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2014-07-09