2014-08-27 12 views
8

Gdzie było pytanie:Jak ograniczyć przepustowość za pomocą RabbitMQ?

Używamy RabbitMQ jako kolejki zadań. Jednym z konkretnych zadań - wysyłanie zawiadomień do sieci społecznościowej Vkontakte. Api ma limit na żądanie na sekundę i ten limit w zależności od wielkości aplikacji. Tylko 3 zaproszenia do aplikacji z mniej niż 100 000 osób i tak dalej. Musimy więc sztucznie ograniczyć żądanie do ich obsługi. Teraz ta logika opiera się na aplikacji. To proste, podczas gdy możesz użyć tylko jednego pracownika na taką kolejkę, po prostu ustaw coś w rodzaju snu (300 ms) i bądź spokojny. Ale kiedy powinieneś używać pracowników N, ta synchronizacja nie staje się trywialna.

Jak ograniczyć przepustowość za pomocą RabbitMQ?

Na podstawie powyższej historii. Gdyby było to możliwe, ustaw rozmiar preselekcji nie tylko na podstawie wiadomości, ale czas oparty na tej logice może być bardzo prosty. Na przykład "qos to 1 wiadomość na pobranie nie szybciej niż 1 raz w sekundach" lub tak dalej.

  1. Czy jest coś takiego?
  2. Może być inna strategia na ten temat?
+0

Czy używasz N klientów do tej samej kolejki? Czy potrzebujesz "zaplanować" jedną lub więcej kolejki? – Gabriele

+0

Tak, N klientów w tej samej kolejce. Powinien być zaplanowany na kolejkę. – misterion

Odpowiedz

1

Nie jest to możliwe po wyjęciu z pudełka z RabbitMQ.

Masz rację, w przypadku rozproszonych klientów takie dławienie staje się trudnym zadaniem. Sugerowałabym zapoznanie się z programem ZooKeeper, który umożliwiłby synchronizację wszystkich klientów i przetwarzanie wiadomości za pomocą dźwigni, wykorzystując w tym celu rozwiązanie Znodes/Watches dla dławionego, ale skalowalnego rozwiązania.

Powiązane problemy