2014-08-27 29 views
8

Câu hỏi ở đâu:Làm thế nào để giới hạn thông lượng với RabbitMQ?

Chúng tôi đang sử dụng RabbitMQ làm hàng đợi nhiệm vụ. Một trong những nhiệm vụ cụ thể - gửi thông báo đến mạng xã hội Vkontakte. Họ api có giới hạn để yêu cầu mỗi giây và giới hạn này dựa trên kích thước ứng dụng của bạn. Chỉ cần 3 cuộc gọi cho ứng dụng với ít hơn 100 nghìn người và cứ tiếp tục như vậy. Vì vậy, chúng tôi cần phải giả tạo giới hạn yêu cầu để họ phục vụ. Bây giờ logic này là ứng dụng dựa. Nó đơn giản trong khi bạn có thể sử dụng chỉ một công nhân cho mỗi hàng đợi như vậy, chỉ cần thiết lập một cái gì đó giống như giấc ngủ (300ms) và được bình tĩnh. Nhưng khi bạn nên sử dụng N công nhân đồng bộ hóa này trở nên không tầm thường.

Làm cách nào để giới hạn thông lượng với RabbitMQ?

Dựa trên câu chuyện ở trên. Nếu có thể đặt kích thước tìm nạp trước không chỉ dựa trên thông điệp mà thời gian dựa trên logic này có thể đơn giản hơn nhiều. Ví dụ: "thông báo qos đến 1 mỗi lần tìm nạp không nhanh hơn sau đó 1 lần tính bằng giây" hoặc cứ tiếp tục như vậy.

  1. Có điều gì tương tự không?
  2. Có thể là chiến lược khác về điều này?
+0

Bạn có sử dụng N người tiêu dùng vào cùng một hàng đợi không? Bạn có cần "lên lịch" thêm một hàng nữa không? – Gabriele

+0

Có, N người tiêu dùng trên cùng một hàng đợi. Nó phải được loại bỏ theo hàng đợi. – misterion

Trả lời

1

Không thể thoát khỏi hộp bằng RabbitMQ.

Bạn nói đúng, với người tiêu dùng được phân phối, điều chỉnh này trở thành một bài tập khó. Tôi sẽ đề nghị bạn nên xem xét ZooKeeper cho phép bạn đồng bộ hóa tất cả người tiêu dùng và xử lý thông điệp bằng cách tận dụng Znodes/Watches cho giải pháp có thể điều chỉnh được.

Các vấn đề liên quan