Pracuję nad aplikacją internetową, która jest aplikacją opartą na chmurze dla wielu dzierżawców (wieloma klientami, z których każde ma osobne "środowisko", ale wszystkie na wspólnych zestawach sprzętu) i wprowadzamy możliwość grupowania przez użytkownika zadań do późniejszego przetworzenia. Typy pracy grupowanej naprawdę nie są ważne, to tylko wystarczająca ilość, że robienie tego bez kolejki pracy nie jest zbyt praktyczne. Wybraliśmy RabbitMQ jako naszą podstawową strukturę kolejkową.Pule pracownicze i kolejki dla wielu dzierżawców z RabbitMQ
Ponieważ jesteśmy aplikacją dla wielu dzierżawców, niekoniecznie chcemy, aby klienci mogli powodować długie czasy kolejkowania dla innego klienta, więc jednym z pomysłów, które wprowadziliśmy, jest utworzenie kolejki na w oparciu o klienta i posiadające wspólną pulę pracowników wskazaną we WSZYSTKICH kolejek klienta. Problem polega na tym, że najlepiej jak mogę sobie wyobrazić, pracownicy są bezpośrednio związani z konkretną kolejką, a nie z wymianą. W naszym idealnym świecie nasze kolejki klientów będą nadal przetwarzane, bez jednego klienta blokującego inne, z udostępnionej puli pracowników, którą będziemy mogli powiększać lub zmniejszać w razie potrzeby, uruchamiając więcej pracowników lub zamykając nieaktywne. Posiadanie pracowników przywiązanych do określonej kolejki przeszkadza nam w praktycznym tego sensie, ponieważ często mamy wielu pracowników, którzy pracują w kolejce bezczynności.
Czy jest to stosunkowo proste, aby to osiągnąć? Jestem całkiem nowy w RabbitMQ i naprawdę nie mogliśmy osiągnąć tego, o co nam chodzi. Nie chcemy też pisać bardzo złożonej wielowątkowej aplikacji konsumenckiej, to czas na dev i czas testów, na które prawdopodobnie nie możemy sobie pozwolić. Nasz stos jest oparty na Windows/.Net/C, jeśli to jest germaine, ale nie sądzę, że powinno to mieć istotny wpływ na to pytanie.
Nie pytam o przypisanie wielu pracowników do tej samej kolejki, raczej pytam o odwrotność. Chcę, aby skończona pula pracowników zużywała się z dużej (powiedzmy, że ~ 500) liczby kolejek. – bakasan
Sam eksperymentowałem z tego rodzaju podejściem i to nie jest ładne: ciężko jest znaleźć odpowiednią heurystykę do przetworzenia wszystkich tych kolejek. Czy najpierw przetwarzasz najpełniejsze kolejki? Czy te ze starszymi wiadomościami? W obu przypadkach jesteś poza protokołem AMQP i musisz zacząć zajmować się API zarządzania Rabbit. Wtedy myślisz: miejmy taką samą liczbę kolejek niż pracownicy i dodaj spójne hashowanie między 500 Q a kolejek roboczych. Wtedy zdajesz sobie sprawę, że wystarczy jedna kolejka i n robotników, którzy na niej rywalizują. –
Mam podobne wymagania, ale chcę, aby wiadomości od konkretnego klienta były przetwarzane sekwencyjnie. Kontakt nie zostanie usunięty przed utworzeniem itp. Czy istnieje jakaś konfiguracja lub konfiguracja RabbitMQ, która może to zrobić, ale udostępnia kolejkę między pracownikami? (Czy to nowy Q ...?) – Aaron