laravel中的队列二

RedisManager 用于管理reids的连接。

可以通过app('redis')获取,一个服务器可以配置多个redis连接,app('redis')->connect($connectName);

可以配置是predis还是phpredis。RedisManager创建链接之后通过__call调用对应的redis方法。

 

RedisQueue  redis队列

参看上一篇文章,主要处理队列的相关操作。保持一个对RedisManager的引用根据连接的名字从RedisManager获取实际的连接然后进行调用redis的方法进行相关操作

 

 

QueueManager 队列管理

和RedisManager的管理多个reids相似,QueueManager管理多个队列,可以是redis队列,数据库队列等等。提供extend方法,用户可以自己添加自己的自定义队列,比如阿里的队列,rabbitmq队列。当我们获取一个队列的时候,比如redis队列app('queue')->connection('redis'),会调用对应的connector,最终创建RedisQueue

/**
     * Register the Redis queue connector.
     *
     * @param  \Illuminate\Queue\QueueManager  $manager
     * @return void
     */
    protected function registerRedisConnector($manager)
    {
        $manager->addConnector('redis', function () {
            return new RedisConnector($this->app['redis']);
        });
    }

在上面的代码中$this->app['redis']会获得到RedisManager,RedisConnector的代码如下

public function __construct(Redis $redis, $connection = null)
    {
        $this->redis = $redis;
        $this->connection = $connection;
    }

    /**
     * Establish a queue connection.
     *
     * @param  array  $config
     * @return \Illuminate\Contracts\Queue\Queue
     */
    public function connect(array $config)
    {
        return new RedisQueue(
            $this->redis, $config['queue'],
            $config['connection'] ?? $this->connection,
            $config['retry_after'] ?? 60,
            $config['block_for'] ?? null
        );
    }
RedisConnector执行connet之后返回的就是RedisQueue。我们也可以通过extend添加自己的connector
队列管理还有对各种状态下事件的监听如:
public function failing($callback)
    {
        $this->app['events']->listen(Events\JobFailed::class, $callback);
    }

 



connector
根据队列的配置,获取mysql,redis等连接,然后初始QueueManager。connector就是连接器,把实际的连接和队列管理连接起来

QueueManager中的connection指的是,某个队列的配置,读取到配置之后,通过配置的driver去初始connector,最终获取到队列。
RedisManager中的connection属性指的是用哪个redis连接,该属性传递给RedisManager获取连接,进行操作。
posted @ 2018-12-06 20:47  coder5  阅读(338)  评论(0编辑  收藏  举报