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

nest - mikroserwisy - komunikacja - mqtt

Aruba Cloud - Virtual Private Server VPS
+1 głos
422 wizyt
pytanie zadane 20 marca 2023 w JavaScript przez icytower Bywalec (2,170 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 (46,230 p.)
RabbitMQ załatwia większą część wymaganej funkcjonalności.
komentarz 20 marca 2023 przez icytower Bywalec (2,170 p.)
out of the box czy trzeba kombinować?
komentarz 20 marca 2023 przez reaktywny Nałogowiec (46,230 p.)
Skonfigurować.
komentarz 20 marca 2023 przez icytower Bywalec (2,170 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 (46,230 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 (279,990 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,170 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 (279,990 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ź 552 wizyt
0 głosów
1 odpowiedź 845 wizyt
pytanie zadane 20 grudnia 2020 w JavaScript przez Bish0p Obywatel (1,940 p.)
0 głosów
2 odpowiedzi 620 wizyt

93,291 zapytań

142,290 odpowiedzi

322,337 komentarzy

62,615 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...