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()
{
//
}
}