Как я могу использовать очередь в пользовательском классе в laravel? - PullRequest
0 голосов
/ 03 апреля 2019

В laravel 5.5 я делал услугу SMS

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

или

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

здесь я хочу использовать очередь.Когда я звоню sendTo, это должно работать с очередью.Как я могу это сделать?

1 Ответ

1 голос
/ 03 апреля 2019

Все о Queues в Laravel вы можете прочитать в документации . Вам необходимо сгенерировать 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

В производственной среде вы должны запустить эту команду как Cron Job или использовать Supervisor

...