Sqs visi timeout
Message Visibility Timeout trong SQS¶
1. Message Visibility Timeout là gì?¶
-
Khái niệm:
-
Khi một consumer poll một message từ SQS, message này trở nên invisible (không thể thấy) với các consumer khác trong khoảng thời gian visibility timeout.
-
Mặc định: Thời gian này là 30 giây.
-
Tình huống:
- Nếu consumer xử lý xong và delete message trước khi timeout kết thúc, message sẽ không bị xử lý lần nữa.
- Nếu không xóa, message sẽ quay lại queue (reappear), và có thể được xử lý lại bởi consumer khác hoặc cùng consumer.
2. Vấn đề với Visibility Timeout¶
-
Timeout quá dài:
-
Nếu consumer bị crash, message sẽ mất nhiều thời gian (đến khi hết timeout) để trở nên visible lại, làm chậm xử lý.
-
Timeout quá ngắn:
-
Consumer không kịp xử lý, dẫn đến message bị nhận lại nhiều lần bởi các consumer khác nhau.
-
Duplicate Processing:
- Nếu message timeout và được đưa trở lại queue trong khi vẫn đang được xử lý, dẫn đến xử lý trùng lặp.
3. API hỗ trợ: ChangeMessageVisibility¶
-
Khi nào sử dụng:
-
Nếu consumer biết rằng việc xử lý một message sẽ cần thêm thời gian (hơn thời gian visibility timeout), nó có thể gọi API ChangeMessageVisibility.
-
Tác dụng:
- Gia hạn visibility timeout cho message đó, giữ message invisible lâu hơn, tránh bị xử lý trùng lặp.
4. Cách đặt Visibility Timeout hợp lý¶
-
Cân nhắc:
-
Thời gian này phải phù hợp với ứng dụng.
-
Thời gian phải đủ dài để consumer xử lý, nhưng không quá dài để tránh message bị giữ lại quá lâu nếu có lỗi.
-
Tùy chỉnh:
- Thay đổi giá trị mặc định (từ 0 giây đến 12 giờ) trong cài đặt SQS queue.
- Gọi ChangeMessageVisibility API nếu cần thay đổi timeout cho từng message riêng lẻ.
5. Use Case minh họa¶
-
Ví dụ thực tế:
-
Consumer A nhận một message từ SQS và bắt đầu xử lý.
- Trong thời gian visibility timeout, các consumer khác không thấy được message này.
-
Nếu A không xóa message trước khi timeout, message quay lại queue và có thể được nhận bởi consumer B.
-
Xử lý đúng cách:
- Nếu A cần thêm thời gian xử lý, nó gọi ChangeMessageVisibility API để gia hạn thời gian.
- Sau khi xử lý xong, A delete message để đảm bảo message không bị xử lý lần nữa.
6. Tóm tắt¶
-
Visibility Timeout:
-
Là khoảng thời gian một message trở nên invisible sau khi được nhận bởi một consumer.
-
Thời gian mặc định là 30 giây.
-
Vấn đề:
-
Timeout dài gây chậm trễ.
-
Timeout ngắn dẫn đến duplicate processing.
-
API hỗ trợ:
-
ChangeMessageVisibility API giúp gia hạn timeout cho từng message.
-
Cách đặt timeout:
-
Phụ thuộc vào thời gian xử lý của ứng dụng.
-
Thay đổi trong cài đặt queue hoặc thông qua API.
-
Lưu ý khi xử lý:
- Xóa message sau khi xử lý để tránh bị xử lý lại.
- Điều chỉnh timeout hợp lý với workload của ứng dụng.
Điểm quan trọng cho kỳ thi¶
- Hiểu cơ chế hoạt động của visibility timeout.
- Biết cách sử dụng ChangeMessageVisibility API.
- Có thể trả lời các tình huống liên quan đến duplicate processing và timeout hợp lý.