Laravel 队列

新建任务
namespace App\Jobs;

use app\Models\postArticle;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class PostArticle implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $postArticle;

    /**
     * 创建一个新的任务实例。
     *
     * @param  postArticle $postArticle
     * @return void
     */
    public function __construct(postArticle $postArticle)
    {
        $this->postArticle= $postArticle;
    }

    /**
     * 运行任务。
     *
     * @return void
     */
    public function handle()
    {
        // Process post work...
    }
}

分发任务
namespace App\Http\Controllers;

use App\Jobs\PostArticle;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * 
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        // 发布文章...
        
		// 参数将被传递给 Jobs的 __construct()
        PostArticle::dispatch($postArticle);

		// 延迟分发
		//  PostArticle::dispatch($postArticle)->delay(now()->addMinutes(10));
		
		// 同步执行
		//  PostArticle::dispatchNow($postArticle);

		//工作链
//工作链允许你具体定义一个按序列执行队列任务的列表。一旦序列中的任务失败了,剩余的工作将不会执行。要运行
//一个工作链,你可以对可分发的任务使用 withChain 方法:

		PostArticle::withChain([
		    new AJob,
		    new BJob
		])->dispatch()->allOnConnection('redis')->allOnQueue('postArticle');
		
		// 指定连接  指定队列  【也可以联合起来用】
		//  PostArticle::dispatch($postArticle)->onConnection('redis');
		//  PostArticle::dispatch($postArticle)->onQueue('job1');
    }
}

任务事件
通过在 Queue facade 中使用 before 和 after 方法,你可以指定一个队列任务被执行前后的回调。这些回调是添加额外的日志或增加统计的绝好时机。通常,你应该在 服务提供者中调用这些方法。
例如,我们可以使用 Laravel 的 AppServiceProvider
class AppServiceProvider extends ServiceProvider
{
    /**
     * 引导启动任意应用服务。
     *
     * @return void
     */
    public function boot()
    {
        Queue::before(function (JobProcessing $event) {
            // $event->connectionName
            // $event->job
            // $event->job->payload()
        });

        Queue::after(function (JobProcessed $event) {
            // $event->connectionName
            // $event->job
            // $event->job->payload()
        });
    }

    /**
     * 注册服务提供者。
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

你可能感兴趣的:(laravel)