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获取连接,进行操作。