在laravel 5.5中,我正在提供短信服务
SMS::to("xxxx")->send(new WelcomeSms());
或
WelcomeSms::message("xxx")->sendTo("xxx");
在这里我要使用队列。当我打电话给sendTo
时,它必须与队列一起工作。我该怎么办?
答案 0 :(得分:1)
您可以在documentation中阅读有关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
在生产环境中,您应该以{{1}}的身份运行此命令或使用Supervisor