/ / Asynchrónny vzor žiadosti / odpovede? - jarné topánky, asynchrónne, apache-kafka, mikroservisy

Asynchrónny vzor žiadosti / odpovede? - pružinové topánky, asynchrónne, apache-kafka, mikroservisy

Som celkom nový v oblasti mikroservisov a asynchrónnych architektúr a zaujímam sa, ako v takýchto prostrediach funguje typická požiadavka / odozva.

Príklad 1:

  1. Povedzme, že mám webovú aplikáciu, ktorá odosiela požiadavku POST na adresu / example / doStuff a očakáva, že odpoveď bude vedieť, či bola táto žiadosť úspešne dokončená alebo nie.
  2. Microservice A "s api manipulácia / doStuff má logiku, ktorá hovorí, že kedykoľvek / doStuff sa požaduje, pošlite doStuffInitiated správu o udalosti na správu maklérov.
  3. V dôsledku udalosti doStuffInitiated, mikroservice B a C reagujú na túto správu nastavením príznaku v db atď. A generujú správu doStuffCompleted pre makléra
  4. Toto je miesto, kde som uviazol: Existuje spôsob, ako urobiť mikroservis A čakaťdoStuffCompleted, ktorý bude spotrebovaný pred odoslaním odpovede na webovú aplikáciu, ktorá vytvorila pôvodnú žiadosť? Je to ten správny spôsob, ako na to ísť?

Príklad 2:

  1. Klient čelia webovú aplikáciu robí GET žiadosť / Príklad / getStuff
  2. Microservice Api spracováva getStuff odoslaním stuffRequested udalosť kafka.
  3. Aby sa údaje vrátili k objektu „veci“, údaje sa vyžadujú z 2 externých zdrojov údajov. Microservice B má na starosti manipuláciu s týmito 2 zdrojmi dát, takže spotrebuje stuffRequested udalosti, dostane údaje z 2 zdrojov údajov a pošle stuffRequestCompleted udalosť (s "veci" dáta v užitočnom zaťažení) pre mikroservice A konzumovať tak, aby mohol vrátiť "veci" objekt do aplikácie klienta.
  4. Toto je miesto, kde som uviazol: Keď sa to všetko odohráva v pozadí asynchrónne, ako môžem „pozastaviť“ odosielanie odpovede, kým nebudem môcť spotrebovať stuffRequestCompleted a pošlite späť požadované údaje?

Vopred ďakujem.

odpovede:

2 pre odpoveď č. 1

Namiesto čakania na asynchrónnu časťkompletný (čo považujem za antipattern), urobil by som službu A na odpoveď okamžite - hovoriac, že ​​požiadavka bola prijatá a proces za tým bol spustený.

Potom máte dve možnosti:

  1. na front-periodicky kontrolovať (žiadať) stav operácie,
  2. implementovať server do klientskej komunikácie s websocketom.