Я хотел бы отправить письмо пользователю после создания учетной записи на моем веб-сайте и использовать очереди для их отправки. Я использую PHP Laravel Framework.
Мой контроллер обрабатывает запрос после нажатия «Создать аккаунт»:
class LoginController extends Controller
{
...
public function register(Request $request) {
...
$mail = (new RegisterRequest($user))->onConnection("database")->onQueue("emailsQueue");
Mail::queue($mail);
...
}
}
Тогда у меня есть класс RegisterRequest (отправляемый по почте):
class RegisterRequest extends Mailable
{
use Queueable, SerializesModels;
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function build()
{
return $this->from('user@example.com')
->to($this->user->email)
->subject("Confirm your Email Address")
->view('emails.register.request')
->with("registration_token", $this->user->registration_token);
}
}
Как видите, я использую реляционную базу данных для хранения заданий. И действительно, после вызова метода регистрации LoginController, задание сохраняется в базе данных. Но это не может быть обработано. Я также запускаю php artisan queue:work
, но ничего не делается с заданиями в базе данных. Любая помощь?
EDIT:
Итак, я только что узнал, что выбор заданий из очереди выполняется с помощью SQL, выбирая имя очереди по умолчанию. Но я отправляю письма в очередь 'emailsQueue'. Итак, я сейчас работаю с Queue Worker следующим образом: php artisan queue:work --queue=emailsQueue
и сейчас все работает нормально. Но как я могу выбрать работу из каждой очереди в базе данных? Вероятно, это не лучшая попытка, верно? Было бы бессмысленно называть очереди именами, верно? Но допустим, у меня есть одна очередь для обработки запросов на регистрацию учетных записей, другая очередь для запросов на изменение пароля и так далее ... Поэтому я думаю, что имеет смысл обрабатывать каждую очередь. Так как я могу это сделать? Можно ли это сделать, просто перечислив такие очереди?
php artisan queue:work --queue=registerAccountEmailQueue,changePasswordEmailQueue...
Что именно работает php artisan queue:work
? Я думал, что это команда для запуска всех очередей.