2013-10-14 8 views
35

Dla firmy, w której pracuję, chcielibyśmy wykorzystać RabbitMQ jako nasz główny autobus komunikacyjny. Pomysł polega na tym, że każda aplikacja używa własnego vhosta do komunikacji wewnętrznej, a dzięki wtyczce typu "szufelka" lub "federacja" umożliwiamy udostępnianie określonego typu zdarzeń w wielu vhostach (może nawet w wielu komputerach (nieklastrowych)) . Wybraliśmy dla aplikacji na vhost, aby oddzielić komunikację wewnętrzną od wydarzeń publicznych i zachować bezpieczeństwo regulowane dla każdej aplikacji.Kiedy używać łopatek RabbitMQ i kiedy wtyczka Federation?

Na podstawie informacji opublikowanych na stronie internetowej RabbitMQ nie dostaję go, gdy mam do wyboru łopaty lub gdy muszę wybrać wtyczkę federacyjną.

RabbitMQ posiada następujące explanation kiedy używać co:

Zazwyczaj należy użyć łopatę połączyć brokerów w internecie, gdy trzeba więcej kontroli niż federacja przewiduje.

Co to jest kontrola drobnego ziarna w łopatach, których mi brakuje, gdy wybieram dla federacji?

W tym momencie myślę, że wolałbym wtyczkę federacyjną, ponieważ mógłbym zautomatyzować komunikację między-vhost za pośrednictwem interfejsu API REST zapewnionego przez wtyczkę federacyjną. W przypadku łopaty musiałbym zmienić konfigurację łopaty i zrestartować instancję RabbitMQ za każdym razem, gdy chcielibyśmy udostępnić zdarzenie między vhostami. Czy moje myśli są poprawne?

Obecnie uruchamiamy RMQ w systemie Windows z klientami łączącymi się z .NET. W najbliższej przyszłości dołączą klienci Java/Perl/PHP.

Podsumowując moje pytania:

  • Co jest w porządku kontrola ziarno w łopaty, które mi brakuje kiedy
    wybrać dla federacji?
  • Czy to prawda, że ​​jedynym sposobem zmiany komunikacji wewnątrz-vhostowej podczas korzystania z szufli jest zmiana pliku konfiguracyjnego i ponowne uruchomienie instancji?
  • Czy konfiguracja (vhost dla aplikacji) ma sens, czy całkowicie brakuje mi punktu?

Odpowiedz

25

Łopaty i kolejki zapewniają różne sposoby przekazywania wiadomości z jednego węzła RabbitMQ do drugiego.

Federalne wymiany

ze stowarzyszonym wymiany kolejki może być połączony z kolejki wlotowej (węzła źródłowego). Ponadto wymiana w węźle docelowym (docelowym) otrzyma kopię wiadomości, które zostaną opublikowane w węźle nadrzędnym.

Federacyjne giełdy są podobne do powiązań giełdowych, ponieważ mogą (opcjonalnie) subskrybować ograniczony zestaw wiadomości z giełdy.

Federalne Kolejka (UWAGA: Są nowe w RabbitMQ 3.2.x)

Z stowarzyszonym kolejce, konsumenci mogą być podłączone do kolejki na wejściowym (źródło) i dalszych (przeznaczenia) węzłów .

W istocie kolejka niższego szczebla jest konsumentem w kolejce wyjściowej, oczekując, że będą istnieć dodatkowe konsumenci korzystający z niej, którzy przetwarzają wiadomości w taki sam sposób, jak konsument dołączony do kolejki nadrzędnej.

Wszelkie wiadomości zużywane przez kolejkę niższą (stowarzyszoną) nie będą dostępne dla klientów w kolejce nadrzędnej.

przypadków użycia:

Jeżeli konsumenci są przenoszone z jednego węzła do drugiego, federacyjnych kolejka będzie to pozwolić bez komunikatów jest nieodebranych lub przetwarzane dwukrotnie.

przypadków użycia: from the RabbitMQ docs

Typowe użycie byłoby mieć takie same „logiczne” kolejka rozprowadzane ciągu wielu brokerów. Każdy broker zadeklarowałby kolejkę stowarzyszoną z wszystkimi kolejkami stowarzyszonymi w górę strumienia. (Te związki, tworząc pełną dwukierunkową wykres na N kolejek.)

Łopata

Łopaty drugiej strony podłączyć „upstream” kolejki do „downstream” wymiany. (Umieszczam terminy w cudzysłowie, ponieważ dokumentacja łopaty nie opisuje węzłów z tą samą semantyką co dokumentacja federacyjna).

Łopata zużywa wiadomości z kolejki i wysyła je do centrali w węźle docelowym. (UWAGA: Chociaż nie jest to normalnie omawiane jako część tego wzorca, nic nie stoi na przeszkodzie, aby konsument nawiązywał połączenie z kolejką w węźle początkowym.)

Aby odpowiedzieć na konkretne pytania:

Co jest w porządku kontrola ziarno w łopaty, które mi brakuje gdy wybrać dla federacji?

Łopata nie mieć pobytu na „upstream” lub „downstream” węzła. Można go skonfigurować i obsługiwać z niezależnego węzła.

Łopata może samodzielnie tworzyć wszystkie elementy powiązania: kolejkę źródłową, powiązania kolejki i wymianę docelową. Jest więc nieinwazyjny dla węzła źródłowego lub docelowego.

Czy to prawda, że ​​jedynym sposobem, aby zmienić inter-vhost komunikacie kiedy używać łopaty jest przez zmianę theconfig pliku i ponownym uruchomieniu instancji?

Jest to ogólnie przyjęta wada łopaty.

Za pomocą następującego polecenia (zastrzeżenie: testowane tylko na RabbitMQ 3.1.x, z bardzo specyficznym plikiem rabbitmq.config, który zawiera tylko) można ponownie załadować konfigurację łopaty z określonego pliku. (w tym przypadku /etc/rabbitmq/rabbitmq.config)

rabbitmqctl eval 'application:stop(rabbitmq_shovel), {ok, [[{rabbit, _}|[{rabbitmq_shovel, [{shovels, Shovels}] }]]]} = file:consult("/etc/rabbitmq/rabbitmq.config"), application:set_env(rabbitmq_shovel, shovels, Shovels), application:start(rabbitmq_shovel).' 

.

Czy setup (vhost na aplikację) sensu albo ja brakuje punktu całkowicie?

Decyzja ta będzie zależeć od Twojego przypadku użycia. vhosty zapewniają przede wszystkim logiczną (i dostępową) separację kolejek/giełd i autoryzowanych użytkowników.

13

Łopata działa jak dobrze zaprojektowany wbudowany konsument. Może pobierać komunikaty z brokera źródłowego i kolejki oraz publikować je w docelowym brokerze i wymieniać. Możesz napisać aplikację, aby to zrobić, ale łopata już to zrobiła - jeśli potrzebujesz tylko przenieść wiadomości z kolejki do giełdy tego samego lub innego brokera, łopata może zrobić to za ciebie. Podobnie jak dobrze zachowująca się aplikacja, może zadeklarować wymiany/kolejki/powiązania, ponownie połączyć się, zmienić klucz routingu itp. Możesz ustawić go na źródle lub na docelowym brokerze, a nawet użyć trzeciego brokera. Zasadniczo jest to klient AMQP.

Federacja, z drugiej strony służy do łączenia się z brokerem do jednego lub wielu brokerów upstream lub można nawet tworzyć łańcuchy pośredników, gięcie topologii dowolny sposób. Możesz stowarzyszyć giełdy lub kolejki, a na przykład rozpowszechniać wiadomości do wielu brokerów bez potrzeby wiązania dodatkowych kolejek do wymiany tematów lub korzystania z giełdy wymiany, a także przeszukiwania wiadomości z każdej kolejki do dalszego brokera.

Podsumowując, federacja działa na wyższym poziomie, podczas gdy szufla jest "po prostu" dobrze napisanym klientem.

Aby zrekonfigurować łopatę, niestety trzeba zrestartować broker.

Nie sądzę, że naprawdę potrzebujesz aplikacji na jednego użytkownika. Możesz dodać użytkownika aplikacji do brokera bez oddzielnych vhostów. Nie wiesz, co masz na myśli mówiąc "udostępnij zdarzenie między vhostami".

+8

RabbitMQ obsługuje teraz "dynamiczne koparki", które nie wymagają ponownego uruchomienia: http://www.rabbitmq.com/shovel.html –