如何在一个项目层v4.2中使用两个或更多队列驱动程序

时间:2017-10-31 11:31:06

标签: php laravel

我在laravel v4.2项目中工作,我想要执行不同的queus任务。但现在我想通过使用两个或更多驱动程序来执行此任务。例如,我有一个发送注册电子邮件的队列,现在我想使用redis服务器发送电子邮件。

我的第二个队列是向用户发送推送通知,我想使用数据库驱动器。因此,在一个项目中使用两个或更多队列驱动程序是可能的。

请教育我。

谢谢

1 个答案:

答案 0 :(得分:0)

只需在基座QueueManager

中再写一个QueueManager即可

扩展基本队列驱动程序

use Illuminate\Queue\Connectors\RedisConnector;
use Illuminate\Queue\QueueManager;

class RedisQueueManager extends QueueManager
{
    public function __construct(\Illuminate\Foundation\Application $app)
    {
        parent::__construct($app);

        $this->registerRedisConnector();
    }

    /**
     * Get the name of the default queue connection.
     *
     * @return string
     */
    public function getDefaultDriver()
    {
        return 'redis';
    }

    protected function registerRedisConnector()
    {
        $app = $this->app;

        $this->addConnector('redis', function () use ($app) {
            return new RedisConnector($app['redis']);
        });
    }
}

现在创建一个服务提供商,通过应用

访问它
    <?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Extensions\RedisQueueManager;

class RedisQueueServiceProvider extends ServiceProvider
{
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bindShared('redis-queue', function ($app) {
            return new RedisQueueManager($app);
        });
    }
}

最后在config/app.php供应商阵列中注册您的服务提供商。

并使用它。

Route::get('/', function () {

    $default = app('queue');

    $redis = app('redis-queue');
});