Để ngăn công việc biến mất khỏi hàng đợi SQS sau khi thử lại, bạn có thể thử các phương pháp sau:
1. Tăng giới hạn nhận tối đa trong SQS:
- Theo mặc định, SQS có giới hạn "Số lần nhận tối đa", xác định số lần tối đa một tin nhắn có thể được nhận từ hàng đợi trước khi nó được chuyển đến Hàng đợi Thư Chết (DLQ).
- Tăng giới hạn "Nhận tối đa" cho hàng đợi SQS của bạn lên giá trị cao hơn, chẳng hạn như 10 hoặc 20, để cho phép thử lại nhiều lần hơn trước khi công việc được chuyển sang DLQ.
2. Vô hiệu hóa hàng đợi thư chết (DLQ):
- Nếu bạn không cần chức năng DLQ, bạn có thể tắt nó cho hàng đợi SQS của mình. Điều này sẽ ngăn công việc được chuyển sang DLQ sau số lần thử lại tối đa.
- Để tắt DLQ, bạn có thể tạo hàng đợi SQS mới không có DLQ hoặc sửa đổi cấu hình của hàng đợi hiện có để xóa DLQ.
3. Tăng thời gian chờ hiển thị:
- Thời gian chờ hiển thị trong SQS xác định khoảng thời gian tin nhắn không hiển thị với những người tiêu dùng khác sau khi nhận được.
- Tăng Thời gian chờ hiển thị lên giá trị cao hơn, chẳng hạn như 1 giờ hoặc 2 giờ, để công việc có thêm thời gian xử lý trước khi nó hiển thị lại cho lần thử lại khác.
4. Triển khai logic thử lại tùy chỉnh:
- Thay vì chỉ dựa vào phương thức `retryUntil`, bạn có thể triển khai logic thử lại tùy chỉnh trong phương thức `handle` của công việc.
- Điều này có thể liên quan đến việc kiểm tra số lần thử và giải phóng công việc trở lại hàng đợi theo cách thủ công với độ trễ tùy chỉnh, thay vì để hệ thống hàng đợi xử lý các lần thử lại.
5. Sử dụng trình điều khiển hàng đợi SQS tùy chỉnh:
- Như đã đề cập trong các phản hồi trước, bạn có thể tạo trình điều khiển hàng đợi SQS tùy chỉnh để mở rộng lớp `SqsQueue` mặc định và thêm chức năng bổ sung để xử lý các lần thử lại và ngăn công việc biến mất.
- Điều này có thể giúp bạn kiểm soát tốt hơn hành vi thử lại và đảm bảo rằng công việc không bị mất hoặc bị xóa khỏi hàng đợi sớm.
Bằng cách triển khai một hoặc nhiều phương pháp này, bạn có thể ngăn công việc của mình biến mất khỏi hàng đợi SQS sau khi thử lại và đảm bảo rằng chúng được xử lý thành công hoặc được chuyển sang DLQ như mong đợi.
Trích dẫn:[1] https://dev.to/ichtrojan/configuring-laravel-queues-with-aws-sqs-3f0n
[2] https://www.honeybadger.io/blog/laravel-queues-deep-dive/
[3] https://stackoverflow.com/questions/71411471/laravel-retryuntil-job-exits-after-4th-retry-without-failing
[4] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x- Minutes-if-fails
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue