如何在Laravel中的自定义类上使用队列?

时间:2019-04-03 07:38:06

标签: laravel laravel-queue

在laravel 5.5中,我正在提供短信服务

SMS::to("xxxx")->send(new WelcomeSms());

WelcomeSms::message("xxx")->sendTo("xxx");

在这里我要使用队列。当我打电话给sendTo时,它必须与队列一起工作。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以在documentation中阅读有关QueuesLaravel的全部信息。您需要从控制器生成Queue Job并分派SmsMessage

SmsMessage类:

class SmsMessage {

    private $number;
    private $message;

    public function getNumber(): ?string {
        return $this->number;
    }    

    public function setNumber(string $number) {
        $this->number = $number
    }    

    public function getMessage(): ?string {
        return $this->message;
    }    

    public function setMessage(string $message) {
        $this->message = $message
    } 

}

控制器:

然后从控制器方法分派一些数据并将其放在队列中:

class SmsController extends Controller
{
    /**
     * Send new sms
     *
     * @param  Request  $request
     * @return Response
     */
    public function send(Request $request)
    {
        // Some code here

        $smsMessage = new SmsMessage();
        $smsMessage->setNumber('xxx');
        $smsMessage->setMessage('Lorem ipsum ...');

        SendSms::dispatch($smsMessage);
    }
}

SmsQueueJob类:

php artisan make:job SmsQueueJob

它将生成一个简单的骨架类:

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

    protected $smsMessage;

    /**
     * Create a new job instance.
     *
     * @param  SmsMessage $smsMessage
     * @return void
     */
    public function __construct(SmsMessage $smsMessage)
    {
        $this->smsMessage= $smsMessage;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Here send the SMS message
        SMS::to($sms->getNumber())->send(new WelcomeSms());
    }
}
  

您可以生成新队列,为此队列创建新连接

要在下面运行队列工作器运行命令:

php artisan queue:work

在生产环境中,您应该以{{1​​}}的身份运行此命令或使用Supervisor