Soldemy
0%

Bài đọc

Queue và công việc nền: thực hành có hướng dẫn

3 phút đọc

Đây là bài 3 của chương 7: Queue và công việc nền, thuộc khóa demo Laravel Backend. Nội dung được dùng để trải nghiệm cấu trúc chương trình học; hãy thực hành trên dữ liệu và môi trường thử nghiệm riêng. Trong dự án xuyên suốt, bạn sẽ xây dựng backend quản lý khóa học, bài học và tiến độ học tập.

Mục tiêu cụ thể

Queue tách công việc chậm khỏi request. Job cần xử lý retry, timeout và tác dụng phụ để không gửi thông báo hoặc tạo tài nguyên trùng.

Đề bài thực hành

Thiết kế job gửi thông báo sau đăng ký học; mô phỏng lỗi tạm thời và việc chạy lại cùng job.

Quy trình từng bước

  • Xác định đầu vào, đầu ra và trạng thái trước khi bắt đầu. Với queue và công việc nền, hãy ghi lại kết quả bạn mong muốn trước khi chạy ví dụ.
  • Tạo bản thử nhỏ nhất trong một thư mục hoặc môi trường riêng. Chỉ dùng dữ liệu giả; không sao chép token, tài khoản hoặc dữ liệu cá nhân vào bài tập.
  • Thực hiện yêu cầu: Thiết kế job gửi thông báo sau đăng ký học; mô phỏng lỗi tạm thời và việc chạy lại cùng job.
  • Quan sát kết quả và so sánh từng điều kiện chấp nhận. Khi chưa đạt, thay đổi một yếu tố mỗi lần để biết thay đổi nào tạo ra tác động.
  • Lưu kết quả cùng ghi chú giải thích quyết định. Người khác cần tái hiện được thao tác mà không phải đoán cấu hình hoặc dữ liệu ban đầu.

Điểm khởi đầu

PHP
SendCourseWelcome::dispatch($enrollment->id)->afterCommit();

// Trong job, đọc lại enrollment theo ID,
// kiểm tra trạng thái và dùng khóa duy nhất
// cho từng thông báo cần gửi.

Đối chiếu kết quả

  • Job chỉ chạy sau commit
  • Có chiến lược retry rõ ràng
  • Không gửi trùng khi chạy lại

Nếu kết quả khác dự kiến

Dispatch trước khi transaction commit có thể khiến worker chưa thấy dữ liệu. Retry phải được thiết kế từ đầu, không chỉ tăng số lần thử.

Chụp hoặc ghi lại đầu vào và đầu ra trước khi sửa. Xác nhận tệp đã lưu, đúng môi trường đang chạy và dữ liệu thử vẫn giữ nguyên. Sau khi sửa, chạy lại cả trường hợp ban đầu lẫn một trường hợp biên để tránh sửa được một nhánh nhưng làm hỏng nhánh khác.

Sản phẩm cần lưu

  • Mã nguồn hoặc sơ đồ của bản thử.
  • Dữ liệu đầu vào có thể dùng lại.
  • Ba kết quả kiểm tra kèm giải thích.
  • Một ghi chú về điều bạn sẽ làm khác nếu triển khai cho người dùng thật.

Hỏi đáp

Đăng nhập để đặt câu hỏi và tham gia thảo luận.