Hypef微服务使用task任务示例

 PHP进阶  2020-10-19  admin  3406  4598

在 Server 程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web 服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。Swoole 提供了异步任务处理的功能,可以投递一个异步任务到 TaskWorker 进程池中执行,不影响当前请求的处理速度。

hyperf微服务ask 组件主动方法投递示例

<?php

declare(strict_types=1);

namespace App\Task;

use Hyperf\Task\Annotation\Task;
use MongoDB\Driver\BulkWrite;
use MongoDB\Driver\Manager;
use MongoDB\Driver\Query;
use MongoDB\Driver\WriteConcern;

class MongoTask
{
    /**
     * @var Manager
     */
    public $manager;

    /**
     * @Task
     */
    public function insert(string $namespace, array $document)
    {
        $writeConcern = new WriteConcern(WriteConcern::MAJORITY, 1000);
        $bulk = new BulkWrite();
        $bulk->insert($document);

        $result = $this->manager()->executeBulkWrite($namespace, $bulk, $writeConcern);
        return $result->getUpsertedCount();
    }

    /**
     * @Task
     */
    public function query(string $namespace, array $filter = [], array $options = [])
    {
        $query = new Query($filter, $options);
        $cursor = $this->manager()->executeQuery($namespace, $query);
        return $cursor->toArray();
    }

    protected function manager()
    {
        if ($this->manager instanceof Manager) {
            return $this->manager;
        }
        $uri = 'mongodb://127.0.0.1:27017';
        return $this->manager = new Manager($uri, []);
    }
}

使用

<?php

declare(strict_types=1);

namespace App\Controller;

use App\Task\MongoTask;
use Hyperf\Utils\ApplicationContext;

class IndexController
{

    public function test()
    {
        $client = ApplicationContext::getContainer()->get(MongoTask::class);
        $client->insert('hyperf.test', ['id' => rand(0, 99999999)]);

        $result = $client->query('hyperf.test', [], [
            'sort' => ['id' => -1],
            'limit' => 5,
        ]);
    }

}


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

转载必须注明出处:

Hypef微服务使用task任务示例 —— code.cent123.com

相关推荐


go WaitGroup 的使用方法

在 Go 中,sync 包下的 WaitGroup 能有助于我们控制协程之间的同步。当需要等待一组协程都执行完各自任务后,才能继续后续逻辑。这种场景,就非常适合使用它。WaitGroup 提供三个 API。Add(delta int) 函数提供了 WaitGroup 的任务计数,delta 的值可以为正也可以为负,通常在添加任务时使用。Done() 函数其实就是 Add(-1),在任务完成时调用。

Go语言GUI/图形/图像相关的Go项目列表

Go语言GUI/图形/图像相关的Go项目列表

阿里巴巴java开发手册MySQL 数据库开发规范

阿里巴巴java开发手册MySQL 数据库开发规范

php 秒杀活动逻辑

php 秒杀活动逻辑