• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

nest - mikroserwisy - komunikacja - mqtt

Object Storage Arubacloud
+1 głos
283 wizyt
pytanie zadane 20 marca 2023 w JavaScript przez icytower Bywalec (2,110 p.)

siemka, kojarzy ktoś jakiś pattern, który pozwala odebrać message z dwoch różnych subscriberów?
mamy trzy serwisy M1 (api gateway) M2 i M3 (reagują na messages i events), spięte razem poprzez MQTT (ewentualnie Redis lub RabbitMQ) (serwisy w NestJS)
cel:

  1. M1 wysyla message
  2. M2 reaguje na niego i odsyła odpowiedź
  3. M3 reaguje na niego i odsyła odpowiedź
  4. M1 ma obie odpowiedzi u siebie i cośtam dalej z nimi robi

kojarzy ktoś jakąś sztuczkę, pattern, metodę, ideeę, cokolwiek żeby takie coś zrobić.
jedyne co mi działa to wysyłanie message do M2 i M3 osobno a najlepiej by było jakby to był jeden mesage rozsyłany wszem i wobec.

komentarz 20 marca 2023 przez reaktywny Nałogowiec (40,950 p.)
RabbitMQ załatwia większą część wymaganej funkcjonalności.
komentarz 20 marca 2023 przez icytower Bywalec (2,110 p.)
out of the box czy trzeba kombinować?
komentarz 20 marca 2023 przez reaktywny Nałogowiec (40,950 p.)
Skonfigurować.
komentarz 20 marca 2023 przez icytower Bywalec (2,110 p.)
podrzucisz jakieś linki z info jak to zrobić albo na co zwrócić uwagę? bo kopię się w google i nie mogę znaleźć.
(no i zostanie na przyszłość w wątku ;p )
komentarz 20 marca 2023 przez reaktywny Nałogowiec (40,950 p.)
Gotowca nie znam i pewnie na szybko nie znajdę. Ale jak poznasz Królika, ogólną zasadę działania i prześledzisz kilka tutoriali to stosunkowo szybko powinieneś sobie z tym poradzić. RabbitMQ czy inne (np. ZeroMQ, KubeMQ czy Kafka) do tego z grubsza służą.
2
komentarz 20 marca 2023 przez Wiciorny Ekspert (269,590 p.)

@icytower, chodzi Ci o jedną kolejke? czy dwie inne kolejki? 
 

RabbitMQ załatwia większą część wymaganej funkcjonalności.

To ciekawe... właśnie czekałem, aż to wytłumaczysz. 
Bo bardzo lubie takie doradzanie "jak ogarnies XYZ to zrobisz, ja nigdy nie robilem, nie wiem" ale na pewno sie da.
otóż się nie da. Bo jasno napisane jest w docu nawet RabbitMQ że 
" Every message is only consumed once by one consumer." Wiec jesli to jest jedna kolejka, to nie ma opcji na zczytanie 2 roznych subów.

Jesli SUB wysyła info> i zostanie skonsumowany, to już nie może ponownie być wykorzystany. tak działa kolejka. 

1
komentarz 20 marca 2023 przez icytower Bywalec (2,110 p.)
okej, czyli z tego co rozumiem, to nie ma takiej możliwości. jedyna droga to: 1. M1 wysyła wiadomość do M2 i odbiera dane 2. M1 wysyła wiadomość do M3 i odbiera dane 3. M1 robi rzeczy.

1 odpowiedź

0 głosów
odpowiedź 20 marca 2023 przez Wiciorny Ekspert (269,590 p.)
wybrane 21 marca 2023 przez icytower
 
Najlepsza

Wracając do komentarza: 
 

" Every message is only consumed once by one consumer." Wiec jesli to jest jedna kolejka, to nie ma opcji na zczytanie 2 roznych subów.

Jesli SUB wysyła info> i zostanie skonsumowany, to już nie może ponownie być wykorzystany. tak działa kolejka. 


poszukaj jeszcze pod hasłem "exchange" zamisat korzystania z kolejki, albo BINDOWANIE 1 KOLEJKI na  multi-kolejki
https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.bind
Wtedy nawet bindując queue na exchange, da rade... obsłużyć to na 2 kolejkach, z tym że każda kolejka w M2,M3 musi mieć te sama sygnaturę wiadomosci M1

Nawet jakbys te sama wiadomosci rozdzielił z 2 różnymi kluczami, na 2 różne serwisy
https://medium.com/batc/rabbitmq-message-ordering-on-multiple-consumers-6f484858f589#:~:text=RabbitMQ%20has%20a%20plugin%20for,will%20go%20the%20same%20queue.

To mogłoby mieć miejsce, zależy jaki to typ wiadomości, jeśli korzystasz z AMPQ Advanced Message Queuing Protocol - to nie ma takiej opcji. 
Ale rozdzielając exchange... to 2 kolejek, pyknie.
https://www.cloudamqp.com/blog/part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html#standard-rabbitmq-message-flow

Rozdzielając WIADOMOSC ... na (np. KEY_M1, KEY_m2)... możesz w ten sposób wysłać z odpowiednim parametrem

  • Direct – the exchange forwards the message to a queue based on a routing key

do dwóch serwisów (które mają swoje kolejki ze wskazanym kluczem routingu)  

Podobne pytania

+1 głos
1 odpowiedź 444 wizyt
0 głosów
1 odpowiedź 594 wizyt
pytanie zadane 20 grudnia 2020 w JavaScript przez Bish0p Obywatel (1,940 p.)

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...