San oideachadh sÏmplidh seo nÏ sinn meanbh-sheirbheisean ann an Spring Boot agus cuiridh sinn air dòigh eadar-obrachadh eatorra tro fhrèam Axon.

Canaidh sinn gu bheil a leithid de dhâ obair againn.
Tha stòr de ghnothaichean anns a 'mhargaidh stoc. Bidh an stòr seo aâ sgaoileadh ghnothaichean thugainn tro eadar-aghaidh Rest.
Feumaidh sinn na gnothaichean sin fhaighinn, an sà bhaladh ann an stòr-dà ta agus cruthaich stòradh cuimhneachaidh goireasach.
Feumaidh an stòr seo na gnÏomhan a leanas a choileanadh:
- tilleadh liosta ciĂšird;
- thoir air ais an suidheachadh slà n, i.e. clà r "ionnsramaidean" - "an à ireamh là ithreach de thèarainteachdan";
- thoir air ais suidheachadh airson inneal sònraichte.
Ciamar a dhèiligeas sinn ris an duilgheadas seo?
A rèir riaghailtean fasan microservice, feumaidh sinn an obair a roinn ann am meanbh-sheirbheisean co-phà irteach:
- a 'faighinn malairt Rest;
- a 'sà bhaladh a' ghnothaich don stòr-dà ta;
- stòradh ann an cuimhne airson dà ta a thaisbeanadh a rèir suidheachadh.
Dèanamaid a 'chiad agus an treas seirbheis taobh a-staigh frèam an oideachaidh seo, a' fà gail an dà rna fear airson an dà rna pà irt (sgrÏobh anns na beachdan ma tha seo inntinneach).
Mar sin tha dĂ mhicro-sheirbheisean againn.
Bidh a 'chiad fhear a' faighinn dĂ ta bhon taobh a-muigh.
Bidh an dĂ rna fear aâ pròiseasadh an dĂ ta seo agus aâ freagairt iarrtasan a thig a-steach.
Gu dearbh, tha sinn airson sgèileadh còmhnard fhaighinn, Úrachadh gun stad agus buannachdan eile bho mhicro-sheirbheisean.
Dè an obair gu math duilich a tha romhainn?
Gu fĂŹrinneach, tha tòrr dhiubh ann, ach a-nis bruidhnidh sinn mu mar a bhios dĂ ta a âsruthadh eadar na microservices sin. Faodaidh tu cuideachd Rest a dhèanamh eatorra, faodaidh tu ciudha de sheòrsa air choreigin a chuir, faodaidh tu tòrr rudan a chruthachadh leis na buannachdan agus na h-eas-bhuannachdan aca fhèin.
Bheir sinn sĂšil air aon dòigh-obrach a dhâ fhaodadh a bhith ann - eadar-obrachadh asyncronach tro Axon frèam.
Dè na buannachdan a tha ann an leithid de fhuasgladh?
An toiseach, bidh eadar-obrachadh asyncronach a âmeudachadh sĂšbailteachd (tha, tha minus an seo, ach chan eil sinn aâ bruidhinn ach mu na buannachdan an-drĂ sta).
San dĂ rna h-Ă ite, dĂŹreach a-mach Ă s aâ bhogsa a gheibh sinn Stòradh Tachartas и CQRS.
San treas Ă ite, tha Axon aâ toirt seachad bun-structar deiseil, agus chan fheum sinn ach fòcas a chuir air leasachadh loidsig gnĂŹomhachais.
Feuch an tòisich sinn.
Bidh am pròiseact againn air astar. Bidh trÏ modalan ann:
- cumanta. modal le structaran dĂ ta cumanta (cha toil leinn lethbhreac-paste);
- malairtCruthaiche. modal le microservice airson gabhail ri gnothaichean tro Rest;
- Ceistean malairt. modal le microservice airson taisbeanadh suidheachadh.
Gabhamaid Spring Boot mar bhunait agus ceangail an inneal tòiseachaidh Axon.
Bidh Axon ag obair gu math às aonais an Earraich, ach cleachdaidh sinn iad còmhla.
An seo feumaidh sinn stad agus beagan fhaclan a rĂ dh mu Axon.
Is e siostam frithealaiche teachdaiche a tha seo. Tha frithealaiche ann - is e tagradh air leth a tha seo, ruithidh sinn e ann an Docker.
Agus tha teachdaichean ann a tha freumhaichte ann am microservices.
Seo an dealbh a gheibh sinn. An toiseach, tòisichidh am frithealaiche Axon (ann an Docker), an uairsin na microservices againn.
Nuair a thòisicheas tu, bidh microservices aâ lorg frithealaiche agus aâ tòiseachadh ag eadar-obrachadh leis. Faodar eadar-obrachadh a roinn ann an dĂ sheòrsa: teicnigeach agus gnĂŹomhachais.
Gu teicnigeach, is e seo iomlaid teachdaireachdan âTha mi beòâ (tha teachdaireachdan mar sin rim faicinn sa mhodh logaidh deasbaid).
Is e gnĂŹomhachas iomlaid teachdaireachdan mar âaonta Ăšr.â
Feart cudromach: Ă s deidh a chuir air bhog, faodaidh am microservice faighneachd don t-seirbheisiche Axon âdè thachairâ agus bidh an frithealaiche a âcur na tachartasan cruinnichte chun mhicro-sheirbheis. San dòigh seo, faodar am microservice ath-thòiseachadh gu ĂŹre mhath sĂ bhailte gun a bhith a âcall dĂ ta.
Leis an sgeama iomlaid seo, is urrainn dhuinn mòran eisimpleirean de mhicro-sheirbheisean a chuir air bhog gu furasta,
agus air diofar luchd-aoigheachd.
Tha, chan eil aon eisimpleir de fhrithealaiche Axon earbsach, ach sin mar a tha e airson a-nis.
Bidh sinn ag obair anns na paradigms Sourcing Tachartas agus CQRS. Tha seo aâ ciallachadh gum feum âĂ itheantanâ, âtachartasanâ agus âtaghaidheanâ a bhith againn.
Bidh aon Ă ithne againn: âcruthaich cĂšmhnantâ, aon tachartas âcruthaich cĂšmhnantâ agus trĂŹ taghaidhean: âseall a h-uile cĂšmhnantâ, âseall suidheachadhâ, âseall suidheachadh le ionnstramaidâ.
Tha an sruth-obrach aâ coimhead mar seo:
- Bidh am microservice tradeCreator aâ gabhail ri malairt Rest.
- Bidh am microservice tradeCreator aâ cruthachadh Ă ithne âcruthaich malairtâ agus ga chuir chun t-seirbheisiche Axon.
- Gabhaidh am frithealaiche Axon ris an Ă ithne agus cuiridh e an Ă ithne air adhart chun neach le Ăšidh, anns aâ chĂšis againn am microservice tradeCreator.
- Bidh am microservice tradeCreator a âfaighinn an Ă ithne, aâ gineadh an tachartas âmalairt air a chruthachadhâ agus ga chuir chun t-seirbheisiche Axon.
- Bidh am frithealaiche Axon aâ faighinn an tachartais agus ga chuir air adhart gu luchd-aontachaidh le Ăšidh.
- An-drĂ sta chan eil againn ach aon neach le Ăšidh: an tradeQueries microservice.
- Bidh am microservice tradeQueries aâ faighinn an tachartais agus ag Ăšrachadh an dĂ ta a-staigh.
(Tha e cudromach aig an Ă m a thèid an tachartas a chruthachadh, is dòcha nach bi an tradeQueries Microservice ri fhaighinn, ach cho luath âs a thòisicheas e, gheibh e an tachartas sa bhad).
Tha, tha am frithealaiche axon aig cridhe aâ chonaltraidh, bidh a h-uile teachdaireachd aâ dol troimhe.
Gluaisidh sinn air adhart gu còdadh.
Gus nach cuir thu dragh air aâ phost le còd, gu h-ĂŹosal cha toir mi seachad ach criomagan; bidh ceangal ris an eisimpleir gu lèir gu h-ĂŹosal.
Feuch an tòisich sinn leis a 'mhodal cumanta cumanta.
Is e na pĂ irtean cumanta ann an tachartas (clas CreatedTradeEvent). Thoir aire don ainm, gu dearbh, is e seo ainm an sgioba a chruthaich an tachartas seo, ach san Ă m a dh'fhalbh. San Ă m a dh'fhalbh, air sgĂ th An toiseach tha Ă ithne ann a dhâ adhbharaicheas tachartas a chruthachadh.
Tha structaran cumanta eile aâ toirt a-steach clasaichean airson cunntas a thoirt air suidheachadh (Suidheachadh clas), malairt (Malairt clas) agus taobh malairt (Taobh enum), i.e. ceannach no reic.
Gluaisidh sinn air adhart chun mhodal tradeCreator.
Tha eadar-aghaidh Rest aig aâ mhodal seo (Class TradeController) airson gabhail ri ciĂšird.
Bhon chĂšmhnant a fhuaireadh, thèid an Ă ithne âcruthaich cĂšmhnantâ a chruthachadh agus a chuir chun t-seirbheisiche 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());
}
Tha an clas TradeAggregate air a chleachdadh gus an à ithne a phròiseasadh.
Airson Axon a lorg, chuir sinn an nota @Aggregate.
Tha an dòigh airson an Ă ithne a ghiullachd aâ coimhead mar seo (air a ghiorrachadh):
@CommandHandler
public TradeAggregate(CreateTradeCommand command) {
log.info("command: {}", command);
var event = CreatedTradeEvent.builder()
.tradeId(command.tradeId())
....
.build();
AggregateLifecycle.apply(event);
}
Thèid tachartas a chruthachadh bhon à ithne agus a chuir chun t-seirbheisiche.
Tha an Ă ithne anns aâ chlas CreateTradeCommand.
A-nis leig dhuinn sĂšil a thoirt air aâ mhodal tradeQueries mu dheireadh.
Tha na taghaidhean air am mĂŹneachadh anns aâ phacaid cheistean.
Tha eadar-aghaidh Rest aig aâ mhodal seo cuideachd
Rianadair malairt clas poblach.
Mar eisimpleir, leigamaid sĂšil air a bhith a 'giollachd an iarrtais: "seall a h-uile gnothach".
@GetMapping("/trade/all")
public List<Trade> findAllTrades() {
return queryGateway.query(new FindAllTradesQuery(),
ResponseTypes.multipleInstancesOf(Trade.class)).join();
}
Thèid iarrtas fetch a chruthachadh agus a chuir chun t-seirbheisiche.
Tha an clas TradesEventHandler air a chleachdadh gus an t-iarrtas fetch a phròiseasadh.
Tha modh air a chomharrachadh le nota
@QueryHandler
public List<Position> handleFindCurrentPositionQuery(FindCurrentPositionQuery query)
Is e esan a tha an urra ri dà ta fhaighinn air ais bho stòradh cuimhne.
Tha ceist ag èirigh a thaobh mar a tha am fiosrachadh anns an stòr seo air Úrachadh.
Feuch an tòisich sinn leis gur e dÏreach seata de ConcurrentHashMap a tha seo, air a dhealbhadh airson sampallan sònraichte.
Gus an Úrachadh, cleachd an dòigh a leanas:
@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);
}Bidh e aâ faighinn an tachartas âcruthaichte le aontaâ agus ag Ăšrachadh nam Mapaichean.
Is iad seo na prĂŹomh phuingean ann an leasachadh microservices.
Dè as urrainn dhut a rà dh mu easbhaidhean Axon?
An toiseach, tha seo na dhuilgheadas den bhun-structar, tha puing fĂ illigeadh air nochdadh - frithealaiche Axon, bidh a h-uile conaltradh a âdol troimhe.
San dĂ rna h-Ă ite, tha ana-cothrom nan siostaman sgaoilte sin air a nochdadh gu soilleir - neo-chunbhalachd dĂ ta sealach. Anns aâ chĂšis againn, dhâ fhaodadh Ăšine fhada nach gabh gabhail ris a dhol seachad eadar a bhith aâ faighinn cĂšmhnant Ăšr agus ag Ăšrachadh an dĂ ta airson na sampallan.
Dè tha air fhà gail air cÚl na seallaidhean?
Chan eil dad air a rĂ dh mu dheidhinn Stòradh Tachartas agus CQRS, dè a thâ ann agus carson a tha feum air.
Ăs aonais na bun-bheachdan sin fhoillseachadh, is dòcha nach bi cuid de phuingean soilleir.
Is dòcha gu feum pÏosan còd fa leth mÏneachadh cuideachd.
Bruidhnidh sinn mu dheidhinn seo aig 21 Sultain.
.
Source: www.habr.com
