Kolejka komunikatów a Usługi internetowe? [zamknięte]

zamknięte . To pytanie jest oparte na opinii . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Zaktualizuj pytanie, aby mogło być odpowiedź z faktami i cytatami przez edytując ten post .

Zamknięte 7 lat temu .

Popraw to pytanie

Na jakich warunkach faworyzuje się aplikacje rozmawiające przez kolejkę komunikatów zamiast przez Usługi internetowe (chodzi mi tylko o XML, JSON, YAML czy cokolwiek przez HTTP, a nie jakieś konkretne Typ)?

Muszę rozmawiać między dwoma aplikacjami w sieci lokalnej. Jedną z nich będzie aplikacja internetowa i będzie musiała żądać poleceń w innej aplikacji (działającej na innym sprzęcie). Żądania to takie rzeczy, jak tworzenie użytkowników, przenoszenie plików i tworzenie katalogów. Na jakich warunkach wolałabym Web Services XML (lub straight TCP czy coś) od korzystania z kolejki komunikatów?

Aplikacja internetowa to Ruby on Rails, ale myślę, że pytanie jest szersze.

Author: Dan Rosenstark, 2010-03-05

5 answers

Kiedy korzystasz z serwisu www masz klienta i Serwer:

  1. Jeśli serwer zawiedzie, klient musi wziąć odpowiedzialność za obsługę błędu.
  2. gdy serwer działa ponownie, klient jest odpowiedzialny za ponowne jego wysłanie.
  3. Jeśli serwer udzieli odpowiedzi na wywołanie, a Klient zawiedzie, operacja zostanie utracona.
  4. nie masz wątpliwości, czyli: jeśli milion klientów wywoła serwis internetowy na jednym serwerze w sekundę, najprawdopodobniej twój serwer pójdzie na ziemię.
  5. możesz oczekiwać natychmiastowej odpowiedzi od serwera, ale możesz również obsługiwać połączenia asynchroniczne.

Kiedy używasz kolejki komunikatów takich jak RabbitMQ, Beanstalkd, ActiveMQ, IBM MQ Series, Tuxedo oczekujesz innych i bardziej odpornych na błędy wyników:

  1. Jeśli serwer zawiedzie, Kolejka podtrzymuje wiadomość (opcjonalnie, nawet w przypadku wyłączenia komputera).
  2. gdy serwer działa ponownie, otrzymuje wiadomość oczekującą.
  3. Jeśli serwer daje odpowiedź na połączenie i klient nie powiedzie się, jeśli klient nie potwierdził odpowiedzi wiadomość jest utrzymywana.
  4. masz zastrzeżenia, możesz zdecydować, ile żądań jest obsługiwanych przez serwer(nazwij go workerem).
  5. nie oczekujesz natychmiastowej odpowiedzi synchronicznej, ale możesz zaimplementować / symulować połączenia synchroniczne.

Kolejki wiadomości mają o wiele więcej funkcji, ale jest to pewna zasada, aby zdecydować, czy chcesz obsługiwać warunki błędów samodzielnie, czy zostawić do kolejki wiadomości.

 325
Author: sw.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 16:23:26

Ostatnio przeprowadzono sporo badań nad tym, w jaki sposób wywołania REST HTTP mogłyby zastąpić koncepcję kolejki komunikatów.

Jeśli wprowadzasz pojęcie procesu i zadania jako zasobu, potrzeba średniej warstwy wiadomości zaczyna wyparowywać.

Ex:

POST /task/name
    - Returns a 202 accepted status immediately
    - Returns a resource url for the created task: /task/name/X
    - Returns a resource url for the started process: /process/Y

GET /process/Y
    - Returns status of ongoing process

Zadanie może mieć wiele kroków inicjalizacji, a proces może zwracać status, gdy zostanie zapytany lub wysłany do adresu zwrotnego po zakończeniu.

To jest śmiertelnie proste i staje się dość potężne, gdy zdajesz sobie sprawę, że możesz teraz subskrybować kanał RSS / atom wszystkich uruchomionych procesów i zadań bez żadnej warstwy środkowej. Każdy system kolejkowania i tak będzie wymagał jakiegoś webowego front endu, a ta koncepcja ma go wbudowanego bez innej warstwy kodu niestandardowego.

Twoje zasoby istnieją do momentu ich usunięcia, co oznacza, że możesz przeglądać informacje historyczne długo po zakończeniu procesu i zadania.

Wbudowano funkcję service discovery, nawet dla zadania, które ma wiele kroki, bez dodatkowych skomplikowanych protokołów.

GET /task/name
    - returns form with required fields

POST (URL provided form's "action" attribute)

Your service discovery to formularz HTML-uniwersalny i czytelny dla człowieka format.

Cały przepływ może być używany programowo lub przez człowieka, przy użyciu powszechnie akceptowanych narzędzi. To klient napędzany, a więc spokojny. Każde narzędzie stworzone dla sieci Web może napędzać twoje procesy biznesowe. Nadal masz alternatywne kanały wiadomości, wysyłając asynchronicznie do oddzielnej tablicy serwerów dziennika.

Po tobie zastanów się przez chwilę, usiądź wygodnie i zacznij zdawać sobie sprawę, że odpoczynek może całkowicie wyeliminować potrzebę kolejki wiadomości i ESB.

Http://www.infoq.com/presentations/BPM-with-REST

 76
Author: tempire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-16 00:23:05

Kolejki komunikatów są idealne dla żądań, które mogą zająć dużo czasu. Żądania są kolejkowane i mogą być przetwarzane w trybie offline bez blokowania klienta. Jeśli klient musi zostać powiadomiony o zakończeniu, możesz zapewnić klientowi sposób okresowego sprawdzania statusu żądania.

Kolejki komunikatów umożliwiają również lepsze skalowanie w czasie. Poprawia zdolność radzenia sobie z wybuchami ciężkiej aktywności, ponieważ rzeczywiste przetwarzanie może być rozłożone na czas.

Zauważ, że kolejki komunikatów i usługi internetowe są pojęciami ortogonalnymi, tzn. nie wykluczają się wzajemnie. Na przykład możesz mieć usługę internetową opartą na XML, która działa jako interfejs do kolejki komunikatów. Myślę, że rozróżnienie, którego szukasz, to kolejki wiadomości w porównaniu z żądaniem / odpowiedzią, ta ostatnia jest wtedy, gdy żądanie jest przetwarzane synchronicznie.

 37
Author: DSO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 01:28:38

Kolejki wiadomości są asynchroniczne i mogą ponowić kilka razy, jeśli dostawa nie powiedzie się. Użyj kolejki komunikatów, jeśli żądający nie musi czekać na odpowiedź.

Fraza "web services" sprawia, że myślę o synchronicznych wywołaniach do rozproszonego komponentu przez HTTP. Użyj usług internetowych, jeśli żądający potrzebuje odpowiedzi.

 29
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 01:17:52

Myślę, że ogólnie rzecz biorąc, przydałaby się Usługa sieciowa dla zadania blokującego (zadanie to musi zostać wykonane zanim wykonamy więcej kodu), oraz kolejka komunikatów dla zadania nie blokującego(może to zająć trochę czasu, ale nie musimy na to czekać).

 22
Author: Tobias Cohen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 01:18:48