Laravel - Khi thực hiện action như thêm hay sửa thì sau 15 phút thực hiện action thì nó sẽ thực hiện gửi mail thì nên dùng cronjob hay queue ?
Mong mọi người giúp đỡ
2 CÂU TRẢ LỜI
Bạn cần phân biệt 2 cái này là hai khái niệm khác nhau
- Cronjob là chức năng để lên lịch cho một tác vụ cụ thể nào đó (lặp đi lặp lại trong một thời gian cố định)
- Queue (hàng đợi) dùng để đưa những tác vụ chưa xử lý xong vào hàng chờ giúp ứng dụng thân thiện với người dùng, có thể sắp xếp ưu tiên job nào chạy trước, chạy sau trong hàng đợi (tránh người dùng phải chờ lâu vì các task trong queue sẽ chạy ngầm, tránh loading mãi, ưu tiên những thứ quan trọng chạy trước, ...).
Khi thực hiện action thêm hay sửa và gửi mail sau khi thực hiện action đấy: cái này không liên quan tới việc tác vụ lặp lại như email gửi định kỳ nên không dùng cron
, mình sẽ dùng queue
thôi nhé.
Ngoài ra , bạn có thể dùng cron
để schedule (lên lịch) cho việc quét lại những email bị gửi lỗi trong khung giờ nhất định để gửi lại cho người dùng
@pviethieu Em cảm ơn, trong trường hợp chờ 15p thì e sẽ sử dụng $job = (new YourEvent($coolEvent))->delay(Carbon::now()->addSeconds(60*15))
đúng không ạ ?
@quanglv1997 đúng rồi bạn vào đây xem cho chính xác nhé. mình sẽ sử dụng dispatch()->delay() https://laravel.com/docs/9.x/queues
có rất nhiều cách thực hiện, tùy vào số lượng và tần suất đầu tiên bạn cần đánh giá là số lượng action như vậy có nhiều không, nếu nhiều thì nó xảy ra cùng lúc hay đồng đều các khung giờ, ví dụ trong 1 phút có bao nhiêu mail như thế cần được gửi
- th số lượng nhỏ: bạn dùng delayed job, ở đây là delayed 15 phút, điểm yếu là số lượng message trong 15 phút sẽ ở trong queue, mà queue thường là ram, nếu nhiều tốn tài nguyên -th số lượng lớn: bạn tạo 1 table để lưu job, thường nó sẽ được dùng như history, bạn tạo 1 daemon process hoặc cronjob quét 1 phút 1 lần để lấy job từ bảng và insert message vào queue