2011-12-08 11 views
11

Trong dịch vụ web của Amazon, hàng đợi của chúng cho phép bạn đăng tin nhắn với thời gian trễ hiển thị lên đến 15 phút. Nếu tôi không muốn tin nhắn hiển thị trong 6 tháng thì sao?Có cách nào thanh lịch để đăng tin nhắn lên AWS SQS với độ trễ hiển thị lâu hơn 15 phút không?

Tôi đang cố gắng đưa ra giải pháp thanh lịch cho vấn đề thăm dò/đẩy. Tôi có thể viết mã để thăm dò SQS (hoặc một cơ sở dữ liệu) sau mỗi vài giây, kiểm tra các thông điệp đã sẵn sàng để hiển thị, sau đó chuyển chúng vào một "hàng đợi nhìn thấy được", hoặc một cái gì đó tương tự. Tôi ước rằng có một phương pháp đơn giản hơn, đáng tin cậy hơn để các thông điệp trở nên hiển thị trong hàng đợi xa trong tương lai mà không cần phải lo lắng về ứng dụng bỏ phiếu của tôi hoạt động hoàn hảo mọi lúc.

Tôi chưa kết hôn với AWS, SQS hoặc bất kỳ điều gì, nhưng tôi muốn tìm một giải pháp thân thiện với đám mây ổn định, đáng tin cậy và sẽ kích hoạt sự kiện trong tương lai mà không cần phải lo lắng về kiểm tra tình trạng của nó mỗi ngày.

Bất kỳ suy nghĩ hoặc cây thay thế nào để tôi khám phá sủa đều được chào đón.

Cảm ơn!

Trả lời

8

Có vẻ như bạn có thể hiểu nhầm về độ trễ hiển thị. Mục đích của nó là để đảm bảo rằng ứng dụng bỏ phiếu không kéo cùng một mục ra khỏi hàng đợi nhiều lần.

Nói cách khác, khi mục được kéo ra khỏi hàng đợi, nó sẽ trở nên vô hình trong một khoảng thời gian xác định trước (mặc định là 30 giây, tối đa là 15 phút) trong trường hợp hệ thống bỏ phiếu có một cụm máy đọc từ hàng đợi tất cả trong một.

Dưới đây là các tài liệu liên quan:

http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/IntroductionArticle.html#AboutVT

... và câu đặc biệt có liên quan đến bình luận của tôi là:

"Ngay sau khi thành phần nhận tin nhắn, thông điệp vẫn là Tuy nhiên, bạn không muốn các thành phần khác trong hệ thống nhận và xử lý thông báo một lần nữa, do đó, SQS của Amazon chặn chúng với thời gian chờ hiển thị, là khoảng thời gian mà SQS của Amazon ngăn các thành phần tiêu thụ khác nhận được và xử lý thông báo đó. "

Bạn sẽ có thể sử dụng SQS cho mục đích của mình vì bạn có thể để lại một mục trong hàng đợi miễn là bạn muốn.

+2

Xin chào Jay- Xin lỗi tôi không rõ ràng hơn với câu hỏi của tôi. Tôi không đề cập đến khả năng hiển thị thông báo, nhưng Hàng đợi trì hoãn, nơi thông báo không hiển thị với bất kỳ ai trong một khoảng thời gian (và không phải vì chúng đã được kiểm tra bởi một số quy trình khác). Điều này ngăn tất cả mọi thứ được xử lý bởi bất cứ điều gì cho một người dùng xác định khoảng thời gian. Đây là một liên kết: http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/IntroductionArticle.html#sqs-delay-queues –

+2

Bạn có thể muốn xem http://www.iron.io, họ đã có một vài sản phẩm mới trông khá tốt cho những gì bạn đang cố gắng làm. –

3

7 năm sau và Amazon vẫn không hỗ trợ tính năng bạn cần!

Hai cách để bạn có thể loại cho nó hoạt động là:

  • đã thông điệp chứa một datetime mục tiêu giao hàng trong message_attributes của họ, và có những người lao động có thể tiêu thụ thông điệp của hàng đợi chỉ cần xóa và tạo lại bất kỳ thông điệp rằng được tiêu thụ trước mục tiêu của nó, với độ trễ = max (0, min (secs_until_target_datetime, 900)); điều đó sẽ cho phép bạn sắp xếp một thông điệp hiệu quả cho bất kỳ thời gian tương lai tùy ý nào;

hay,

  • (hơi ít thường xuyên và constly :) tương tự, nếu một thông điệp là không phải do bị xử lý nào, tái tạo nó và thay đổi thời gian chờ mức độ hiển thị được timeout = max (0 , min (secs_until_target_datetime, 43200))

Điều bất lợi khi sử dụng thời gian chờ hiển thị là mọi lần đọc sẽ kích hoạt lại.