2012-09-07 29 views
19

Cho đến nay, không ai (không phải ngay cả những tài liệu GAE) đã có thể cho tôi một mô tả thực sự rõ ràng về những gì là sự khác biệt giữa một đẩy hàng đợi và một kéo hàng đợi .Đẩy vs Queues Kéo trên Google App Engine

My Hiểu là API hàng đợi nhiệm vụ cho phép bạn xác định hàng đợi công việc nơi công việc có thể được đưa vào. Bằng cách nào đó, điều này làm việc với tính năng tự động mở rộng quy mô của GAE để bạn không cần phải quản lý rõ ràng số lượng các chuỗi công việc tiêu thụ các nhiệm vụ ra khỏi các hàng đợi này: GAE chỉ làm việc đó cho bạn.

Nhưng không nơi nào tôi có thể tìm thấy mô tả "Tiếng Anh của nhà vua" về sự khác biệt giữa hàng đợi đẩy và kéo. "Hàng đợi đẩy" là gì? "Hàng đợi kéo" là gì? Cả hai đều được định cấu hình bên trong queues.xml?

Trả lời

24

Trong một hàng đợi kéo bạn enqueue nhiệm vụ vào hàng đợi và mã của bạn cần kéo chúng, bạn kéo chúng bằng cách cho thuê công việc từ hàng đợi và xóa nhiệm vụ. nếu bạn không xóa các nhiệm vụ và thời gian thuê hết hạn, hệ thống sẽ trả lại các tác vụ trở lại hàng đợi.

Bạn có thể sử dụng hàng đợi kéo (ví dụ) để tổng hợp nhiều đơn vị công việc có thể được xử lý cùng nhau. Một ví dụ khác: xếp hàng nhiệm vụ sẽ được kéo bởi một máy bên ngoài (như EC2 hoặc gCompute) để xử lý tác vụ theo cách mà AppEngine không thể.

Trong hàng đợi đẩy bạn enqueue nhiệm vụ vào hàng đợi nhưng AppEngine sẽ dequeue họ và sẽ chạy chúng trên bộ xử lý được chỉ định bởi tác vụ. Bạn có thể kiểm soát tốc độ xử lý tác vụ, cách kiểm soát lỗi thực thi tác vụ và AppEngine sẽ quyết định có bao nhiêu phiên bản (luồng) để sử dụng để xử lý.

+1

Ahhh cảm ơn @Shay Erlichmen (+1) - để tóm tắt: hàng đợi "kéo" yêu cầu bạn phải loại bỏ thủ công và xử lý công việc một cách rõ ràng trong mã của bạn; trong khi với hàng đợi "push" bạn chỉ cần chỉ định một trình xử lý và một cấu hình và GAE sẽ xử lý phần còn lại. Đây có phải là một đánh giá công bằng không? Ngoài ra, một vài followups: (1) hiện 'queues.xml' chỉ áp dụng cho hàng đợi đẩy? (2) Tôi giả định API hàng đợi nhiệm vụ chứa mã cho nhiệm vụ xóa/xóa rõ ràng từ một hàng đợi kéo, phải không? Cảm ơn một lần nữa! – IAmYourFaja

+1

@pnongrata Tóm tắt của bạn là chính xác, và đối với (1) không, bạn cũng xác định hàng đợi kéo trong queues.xml, ở mức tối thiểu nếu hàng đợi không nằm trong xml nó không tồn tại. và (2) có, hãy tìm thuê_queue (dequeue) và delete_tasks. –