laravel中使用 database为驱动的队列发送消息

简介

laravel 的队列服务对各种不同的后台队列服务提供了统一的 API。队列允许你延迟执行消耗时间的任务,这样可以有效的降低请求响应的时间。这里做一个向所有用户发送系统消息的案例。

创建noticesuser_notice
php artisan make:migration create_table_notice
public funtion up()
{
  Schema::create('notices',function(Blueprint $table){
      $table->increments('id');
      $table->string('title',50)->default("");
      $table->string('content',50)->default("");
      $table->timestamps();
    });
   Schema::create('user_notice',function(Blueprint $table){
      $table->increments('id');
      $table->integer('user_id')->default(0);
      $table->integer('notice_id')->default(0);
    });
} 

  public function down()
 {
     Schema::dropIfExists('notices'); 
     Schema::dropIfExists('user_notice'); 
 }
 
php artisan migrate
关联模型

模型User下多对多关联表user_noticenotices

//用户收到的通知
public function notices(){
   return $this->belongsToMany(Notice:class,'user_notice','user_id','notice_id')
        ->withPivot(['user_id','notice_id']);
}
//给用户增加通知
public function addNotice($notice){
    return $this->notices()->save($notice); 
}
修改驱动为database

队列的配置文件被存储在 config/queue.php

 'default' => env('QUEUE_DRIVER', 'sync'),

修改.env

QUEUE_DRIVER=database
创建database的queue表
php artisan queue:table
php artisan migrate
定义任务SendMessage
php artisan make:job SendMessage 

app/Jobs下会生产相应文件,并定义队列方法

class SendReminderEmail extends Job implements ShouldQueue
{
  use Dispatchable,InteractsWithQueue,Queueadble,SerializesModels;

  protected $notice;   //消息

  public function __construct(Notice $notice)
 {
    $this->notice = $notice;
 }


  public function handle()
  {
    //通知每个用户系统消息
    $users = User:all();
    foreach( $users as $user ){
    $user->addNotice($this->notice);  
  }
}
}
分发任务 dispatch

定义发送系统消息的方法

public function send(){
   $notice = Notice::create(request(['title','content']));//接受到消息
   dispatch(new \App\Jobs\SendMessage($notice));//消息分发到队列
}
启动队列
php artisan queue:work

nohup php artisan queue:work >> /dev/null & //后台启动(方法)
ps aux|grep queue:work //后台启动(方法2)

你可能感兴趣的:(laravel中使用 database为驱动的队列发送消息)