Casharradan fudud waxaanu ku samayn doonaa dhawr adeeg oo yaryar oo ku jira Bootka Guga waxaanan ku habeyn doonaa isdhexgalka dhexdooda iyada oo loo marayo qaabka Axon.

Aynu nidhaahno waxaanu haynaa hawshan oo kale.
Waxaa jira isha wax kala iibsiga ee suuqa saamiyada. Ishani waxay nagu soo gudbisaa macaamilka iyada oo loo sii marayo Interface-ka Nasashada.
Waxaan u baahanahay inaan helno macaamiladan, ku keydinno keydka macluumaadka oo aan abuurno keydin ku habboon xusuusta.
Kaydkani waa inuu fuliyaa hawlaha soo socda:
- soo celi liiska ganacsiyada;
- soo celi booska buuxa, i.e. miiska "qalabka" - "tirada hadda jirta";
- u soo celi boos qalab la siiyay.
Sideen u wajahnaa dhibaatadan?
Marka loo eego qawaaniinta moodada microservice, waxaan u baahanahay inaan u kala qaybino hawsha qayb ahaan adeegyada yar yar:
- helitaanka macaamil Nasasho;
- kaydinta wax kala iibsiga ee xogta;
- kaydinta xusuusta gudaha si loogu soo bandhigo xogta booska.
Aynu ka dhigno adeegyada koowaad iyo saddexaad ee qaabka casharradan, anagoo u dhaafayna kan labaad qaybta labaad (ku qor faallooyinka haddii tani ay xiiso leedahay).
Markaa waxaanu haynaa laba adeeg oo yar yar.
Midka ugu horreeya wuxuu helayaa xogta dibadda.
Midda labaad waxay habaysaa xogtan waxayna ka jawaabtaa codsiyada soo socda.
Dabcan, waxaan rabnaa inaan helno miisaan toosan, cusbooneysiin aan joogsi lahayn iyo faa'iidooyinka kale ee adeegyadda yar yar.
Waa maxay hawl aad u adag oo ina hor taal?
Dhab ahaantii, waxaa jira qaar badan oo iyaga ka mid ah, laakiin hadda aan ka hadalno sida xogta ay u dhex mari doonto adeegaha yaryar. Waxa kale oo aad samayn kartaa Nasasho u dhaxaysa iyaga, waxaad gelin kartaa nooc ka mid ah safka, waxaad la imaan kartaa waxyaabo badan oo leh faa'iidooyin iyo khasaare.
Aynu eegno hal hab oo suurtagal ah - asynchronous interaction via Qaab dhismeedka Axon.
Waa maxay faa'iidooyinka xalka noocaas ah?
Marka hore, isdhexgalka asynchronous wuxuu kordhiyaa dabacsanaanta (haa, waxaa jira wax laga jaray halkan, laakiin waxaan hadda ka hadlaynaa faa'iidooyinka hadda).
Marka labaad, isla markaaba sanduuqa ayaan ka helnaa Isha Dhacdada и CQRS.
Marka seddexaad, Axon waxay bixisaa kaabayaal diyaarsan, waxaana kaliya oo aan u baahanahay inaan diirada saarno horumarinta macquulka ganacsiga.
Aynu bilowno.
Mashruucayagu wuxuu noqon doonaa mid heersare ah. Waxay yeelan doontaa saddex qaybood:
- guud. module leh qaab-dhismeedka xogta caadiga ah (ma jecli koobiyeynta);
- ganacsi Abuuraha. module leh adeeg-yar oo loogu talagalay aqbalka macaamilka iyada oo loo marayo Nasashada;
- Weydiimaha ganacsiga. module leh microservice si ay u muujiyaan booska.
Aan u qaadano Bootka Spring oo saldhig u ah oo aan ku xidhno bilawga Axon.
Axon si fiican ayuu u shaqeeyaa guga la'aanteed, laakiin waanu wada isticmaali doonaa.
Halkan waxaan u baahanahay inaan joojino oo aan dhowr eray ka niraahno Axon.
Tani waa nidaamka macmiilka-server. Waxaa jira server - kani waa codsi gooni ah, waxaan ku socodsiin doonaa Docker.
Oo waxaa jira macaamiil ku dhex jira adeegyada yaryar.
Kani waa sawirka aan helayno. Marka hore, server-ka Axon wuxuu ka bilaabmaa ( gudaha Docker), ka dibna adeegyadeena yaryar.
Marka la bilaabayo, microservices waxay raadiyaan server waxayna bilaabaan inay la falgalaan. Isdhexgalka waxa loo qaybin karaa laba nooc: farsamo iyo ganacsi.
Farsamo ahaan, tani waa isdhaafsiga fariimaha "waan noolahay" (farriimaha noocan oo kale ah waxaa lagu arki karaa habka wax-ka-qabashada).
Ganacsigu waa isdhaafsiga fariimaha sida "heshiiska cusub."
Muuqaal muhiim ah: ka dib markii la bilaabay, microservice-ku wuxuu weydiin karaa server-ka Axon "maxaa dhacay" iyo server-ku wuxuu u soo diraa dhacdooyinka la ururiyay microservice. Sidan, microservice-ka ayaa dib loogu bilaabi karaa si badbaado leh iyada oo aan lumin xogta.
Nidaamkan wax-is-weydaarsiga, waxaan si fudud u bilaabi karnaa xaalado badan oo adeeg-yaro ah,
iyo martigaliyayaasha kala duwan.
Haa, hal tusaale oo ka mid ah server-ka Axon ma aha mid la isku halayn karo, laakiin taasi waa sida ay hadda tahay.
Waxaan ka shaqaynaa Isha Dhacdada iyo jaantusyada CQRS. Taas macneheedu waa inaynu yeelano "amaro", "dhacdooyin" iyo "doorasho".
Waxaan yeelan doonaa hal amar: "abuur heshiis", hal dhacdo "heshiis la abuuray" iyo saddex doorasho: "muuji dhammaan heshiisyada", "muuji booska", "muuji booska by qalab".
Socodka shaqadu wuxuu u eg yahay sidan:
- Adeegga yar-yar ee ganacsi abuuruhu wuxuu aqbalaa ganacsiga Nasashada.
- Microservice-ka ganacsigaCreator wuxuu abuuraa amar "abuur ganacsi" wuxuuna u diraa server-ka Axon.
- Adeegga Axon ayaa aqbala amarka oo u gudbiya amarka qaataha xiisaynaya, kiiskeena ganacsigaCreator microservice.
- Microservice-ka ganacsiga abuuraha wuxuu helayaa amarka, wuxuu abuuraa dhacdada "ganacsiga la abuuray" wuxuuna u diraa server-ka Axon.
- Seerarka Axon ayaa helaya dhacdada oo u sii gudbiya macaamiisha xiisaynaya.
- Hadda waxaan haysanaa hal heste oo danaynaya: tradeQueries microservice.
- Adeegga yar-yar ee tradeQueries ayaa helaya dhacdada oo cusboonaysii xogta gudaha.
(Waxaa muhiim ah in waqtiga dhacdada la soo saarayo, ganacsiga Queries Microservice laga yaabo in aan la heli karin, laakiin sida ugu dhakhsaha badan ee ay bilaabato, waxay isla markiiba heli doontaa dhacdada).
Haa, server-ka axon wuxuu ku yaalaa bartamaha isgaarsiinta, dhammaan fariimaha ayaa dhex mara.
Aan u gudubno codaynta.
Si aan boostada loogu qasin koodka, hoos waxaan ku siin doonaa jajab kaliya; isku xirka tusaalaha oo dhan ayaa hoos ku yaal.
Aan ku bilowno moduleka caadiga ah ee caadiga ah.
Qaybaha caadiga ah ee ku jira waa dhacdada (class CreatedTradeEvent). U fiirso magaca, dhab ahaantii, tani waa magaca kooxda soo saartay dhacdadan, laakiin wakhti hore. Waagii hore, sababtoo ah Marka hore waxaa jira amar keenaya in dhacdo la abuuro.
Qaab dhismeedka kale ee caadiga ah waxaa ka mid ah fasallo lagu tilmaamayo booska (Position class), ganacsiga (Ganacsiga fasalka) iyo dhinaca ganacsiga (enum Side), i.e. wax iibsanaya ama iibinaya.
Aan u gudubno qaybta ganacsiga abuuraha.
Qaybtani waxa ay leedahay interface Rest (class TradeController) oo lagu aqbalo ganacsiyada.
Laga soo bilaabo heshiiska la helay, amarka "create deal" ayaa la soo saaray oo loo diraa server-ka axon.
@PostMapping("/trade")
public ResponseEntity<String> create(@RequestBody Trade trade) {
var createTradeCommand = CreateTradeCommand.builder()
.tradeId(trade.getTradeId())
...
.build();
var result = commandGateway.sendAndWait(createTradeCommand, 3, TimeUnit.SECONDS);
return ResponseEntity.ok(result.get().toString());
}
Heerka TradeAggregate waxaa loo isticmaalaa in lagu socodsiiyo amarka.
Si Axon u helo, waxaanu dhignay @Aggregate sharraxaadda.
Habka loo habeeyo amarku wuxuu u egyahay sidan (la gaabiyay):
@CommandHandler
public TradeAggregate(CreateTradeCommand command) {
log.info("command: {}", command);
var event = CreatedTradeEvent.builder()
.tradeId(command.tradeId())
....
.build();
AggregateLifecycle.apply(event);
}
Dhacdo ayaa laga soo saaray amarka waxaana loo diraa server-ka.
Amarka wuxuu ku jiraa fasalka CreateTradeCommand.
Hadda aan eegno modulekii u dambeeyay ee su'aalaha ganacsiga.
Xulashada waxaa lagu sifeeyay xirmada weydiimaha.
Qaybtani waxa kale oo ay leedahay interface nasasho
Maamulaha ganacsiga dabaqa guud.
Tusaale ahaan, aynu eegno habaynta codsiga: "show all transactions".
@GetMapping("/trade/all")
public List<Trade> findAllTrades() {
return queryGateway.query(new FindAllTradesQuery(),
ResponseTypes.multipleInstancesOf(Trade.class)).join();
}
Codsiga keenista ayaa la abuuray oo loo diraa serfarka
Nooca TradesEventHandler waxaa loo isticmaalaa in lagu farsameeyo codsiga soo-keenista.
Waxay leedahay hab ku suntan tafsiir
@QueryHandler
public List<Position> handleFindCurrentPositionQuery(FindCurrentPositionQuery query)
Waa isaga ka masuulka ah soo saarista xogta kaydinta xusuusta.
Su'aashu waxay soo baxaysaa sida xogta ku jirta kaydkan loo cusboonaysiiyay.
Aan ku bilowno xaqiiqda ah in kani uu yahay kaliya ConcurrentHashMap, oo loogu talagalay muunado gaar ah.
Si aad u cusboonaysiiso, isticmaal habkan soo socda:
@EventHandler
public void on(CreatedTradeEvent event) {
log.info("event:{}", event);
var trade = Trade.builder()
...
.build();
trades.put(event.tradeId(), trade);
position.merge(event.shortName(), event.size(),
(oldValue, value) -> event.side() == Side.BUY ? oldValue + value : oldValue - value);
}Waxay helaysaa "heshiiskii la abuuray" dhacdada waxayna cusboonaysiisaa Khariidadaha.
Kuwani waa qodobbada ugu muhiimsan ee horumarinta adeegyada yaryar.
Maxaad ka sheegi kartaa cilladaha Axon?
Marka hore, tani waa dhibaatada kaabayaasha, barta fashilka ayaa soo baxday - Axon server, dhammaan isgaarsiintu waxay maraan.
Marka labaad, faa'iido darrada nidaamyada sida loo qaybiyay ayaa si cad u muuqda - xogta ku meel gaarka ah. Xaaladeena, wakhti dheer oo aan la aqbali karin ayaa laga yaabaa inay u dhexayso helitaanka heshiis cusub iyo cusboonaysiinta xogta muunada.
Maxaa daaha gadaashiisa ka hadhay?
Waxba lagama sheego Event Sourcing iyo CQRS, waxa ay tahay iyo waxa loogu baahan yahay.
Iyadoo aan la soo bandhigin fikradahan, qodobbada qaar waxaa laga yaabaa inaysan caddayn.
Waxaa laga yaabaa in jajabyada koodhka shakhsi ahaaneed ay sidoo kale u baahan yihiin sharaxaad.
Tan waxaan kaga hadli doonaa at Sebtembar 21.
.
Source: www.habr.com
