{"id":94393,"date":"2020-09-16T07:43:43","date_gmt":"2020-09-16T05:43:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon"},"modified":"2020-09-16T07:43:43","modified_gmt":"2020-09-16T05:43:43","slug":"mikroservisy-s-kommunikacziej-cherez-axon","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon","title":{"rendered":"Mikroteenused, mis suhtlevad Axoni kaudu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Selles lihtsas juhendis loome paar mikroteenust Spring Bootiga ja korraldame nendevahelise suhtluse Axoni raamistikuga.<\/p>\n<p><img decoding=\"async\" alt=\"Mikroteenused, mis suhtlevad Axoni kaudu\" src=\"\/wp-content\/uploads\/2020\/09\/d570cdb88653309c2f5b382509e5c2a9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<i>Oletame, et meil on selline \u00fclesanne.<\/i><\/p>\n<p>On olemas tehingute allikas aktsiaturul. See allikas edastab meile tehingud REST-liidese kaudu. <\/p>\n<p>Me peame need tehingud k\u00e4tte saama, salvestama andmebaasi ja looma mugava m\u00e4lu salvestuse. <\/p>\n<p>See salvestus peab t\u00e4itma j\u00e4rgmisi funktsioone:<\/p>\n<ul>\n<li> tagastama tehingute nimekirja;<\/li>\n<li> tagastama t\u00e4ieliku positsiooni, st tabeli \u201einstrument\u201d \u2014 \u201ekehtiv aktsiate arv\u201d;<\/li>\n<li> tagastama positsiooni m\u00e4\u00e4ratud instrumendi kohta.<\/li>\n<\/ul>\n<p>\n<i>Kuidas me selle \u00fclesande lahendamisele l\u00e4heneme? <\/i><\/p>\n<p>Mikroteenuste trendide kohaselt peame \u00fclesande jagama mikroteenusteks:<\/p>\n<ul>\n<li> tehingute saamine REST-i kaudu;<\/li>\n<li> tehingute salvestamine andmebaasi;<\/li>\n<li> m\u00e4lu salvestus andmete esitamiseks positsiooni kohta.<\/li>\n<\/ul>\n<p>\nTeeme selle juhendi raames esimesed ja kolmanda teenuse, teise j\u00e4tame teise osa jaoks (kirjutage kommentaaridesse, kui see on huvitav).<\/p>\n<p>Nii et meil on kaks mikroteenust. <\/p>\n<p>Esimene saab andmeid v\u00e4ljastpoolt. <\/p>\n<p>Teine t\u00f6\u00f6tleb neid andmeid ja vastab sissetulevatele p\u00e4ringutele. <\/p>\n<p>Me t\u00f5epoolest soovime horisontaalset skaleerimist, katkematut uuendamist ja teisi mikroteenuste eeliseid.<\/p>\n<p><i>Milline, \u00fcsna keeruline, \u00fclesanne meie ees seisab?<\/i><\/p>\n<p>Tegelikult on neid palju, aga r\u00e4\u00e4gime praegu, kuidas andmed nende mikroteenuste vahel liiguvad. Nende vahel saab samuti teha Rest-i, kasutada mingit j\u00e4rjekorda, leiutada palju asju, millel on omad plussid ja miinused.<\/p>\n<p>Vaatame \u00fcht v\u00f5imalikku l\u00e4henemist \u2013 as\u00fcnkroonset suhtlemist kaudu <b>Axon-raamistiku<\/b>.<\/p>\n<p><i>Millised on sellise lahenduse eelised?<\/i><\/p>\n<p>Esiteks, as\u00fcnkroonse suhtlemisega suureneb paindlikkus (jah, siin on ka miinus, aga r\u00e4\u00e4gime praegu ainult plussidest). <\/p>\n<p>Teiseks, saame otse v\u00e4lja pakutud lahenduse. <b>Event Sourcing<\/b> ja <b>CQRS<\/b>. <br \/>\nKolmandaks, Axon pakub valmis infrastruktuuri, ja meie peame keskenduma ainult \u00e4riloogika arendamisele.<\/p>\n<p>Alustame.<\/p>\n<p>Meie projekt p\u00f5hineb gradle-l. See sisaldab kolme moodulit: <\/p>\n<ul>\n<li> common. moodul, kus on \u00fchised andmestruktuurid (me ei armasta kopeerimist);<\/li>\n<li> tradeCreator. moodul mikroteenusega tehingute vastuv\u00f5tmiseks Rest-i kaudu;<\/li>\n<li> tradeQueries. moodul mikroteenusega positsiooni kuvamiseks.<\/li>\n<\/ul>\n<p>\nV\u00f5tame Spring Booti aluseks ja \u00fchendame Axon starter-i.<\/p>\n<p>Axon t\u00f6\u00f6tab v\u00e4ga h\u00e4sti ka ilma Springita, kuid me kasutame neid koos.<\/p>\n<p>Siin tasub peatuda ja paar s\u00f5na Axonist r\u00e4\u00e4kida. <\/p>\n<p>See on kliendiserveri s\u00fcsteem. On server \u2013 see on eraldi rakendus, mille k\u00e4ivitame Dockeris. <\/p>\n<p>Ja on kliendid, mis integreeruvad mikroteenustesse. <br \/>\nSaame sellise pildi. Esiteks k\u00e4ivitatakse Axon-server (Dockeris), seej\u00e4rel meie mikroteenused. <\/p>\n<p>Mikroteenused otsivad serverit ja hakkavad temaga suhtlema. Suhtlemine jaguneb tinglikult kaheks: tehniliseks ja \u00e4riliseks. <\/p>\n<p>Tehniline \u2013 see on teadevahetus, et \"ma olen elus\" (selliseid teateid v\u00f5ib n\u00e4ha debug-logimise re\u017eiimis). <\/p>\n<p>\u00c4riline \u2013 see on teadevahetus, kus on midagi nagu \"uus tehing\".<\/p>\n<p>Oluline omadus on see, et p\u00e4rast k\u00e4ivitamist v\u00f5ib mikroteenus k\u00fcsida Axon-serverilt \"mida juhtus\" ja server edastab mikroteenusele kogunenud s\u00fcndmused. Nii v\u00f5ib mikroteenust suhteliselt ohutult taask\u00e4ivitada ilma andmete kaotuseta. <br \/>\nSellise vahetusskeemi korral saame v\u00e4ga lihtsalt k\u00e4ivitada palju mikroteenuste eksemplare, <br \/>\nja isegi erinevates hostides.<\/p>\n<p>Jah, \u00fcks eksemplar Axon-serverist \u2013 see pole usaldusv\u00e4\u00e4rne, aga praegu on see nii.<\/p>\n<p>Me t\u00f6\u00f6tame Event Sourcing ja CQRS paradigmas. See t\u00e4hendab, et meil peavad olema \u201ek\u00e4sklused\u201d, \u201es\u00fcndmused\u201d ja \u201evalimised\u201d. <\/p>\n<p>Meil on \u00fcks k\u00e4sklus: \u201eluua tehing\u201d, \u00fcks s\u00fcndmus \u201etehing loodud\u201d ja kolm valikut: \u201en\u00e4ita k\u00f5iki tehinguid\u201d, \u201en\u00e4ita positsiooni\u201d, \u201en\u00e4ita positsiooni instrumendi j\u00e4rgi\u201d.<\/p>\n<p>T\u00f6\u00f6 skeem on j\u00e4rgmine: <\/p>\n<ol>\n<li> Mikroteenus tradeCreator vastutab tehingu vastuv\u00f5tmise eest Rest'i kaudu.<\/li>\n<li> Mikroteenus tradeCreator loob k\u00e4su \u201eluua tehing\u201d ja saadab selle Axon-serverisse.<\/li>\n<li> Axon-server aktsepteerib k\u00e4sku ja edastab selle huvitatud vastuv\u00f5tjale, meie puhul mikroteenusele tradeCreator.<\/li>\n<li> Mikroteenus tradeCreator saab k\u00e4su, loob s\u00fcndmuse \u201etehing loodud\u201d ja saadab selle Axon-serverisse.<\/li>\n<li> Axon-server aktsepteerib s\u00fcndmuse ja edastab selle ettevaatlikult huvitatud tellijatele.<\/li>\n<li> Praegu on meil ainult \u00fcks huvitatud vastuv\u00f5tja \u2013 mikroteenus tradeQueries.<\/li>\n<li> Mikroteenus tradeQueries saab s\u00fcndmuse ja v\u00e4rskendab sisemisi andmeid.<\/li>\n<\/ol>\n<p>\n(Oluline on, et s\u00fcndmuse loomise hetkel v\u00f5ib mikroteenus tradeQueries olla mitteaktiivne, kuid kui see k\u00e4ivitatakse, saab ta koheselt s\u00fcndmuse).<\/p>\n<p>Jah, axon-server seisab suhtluse keskmes, k\u00f5ik s\u00f5numid liiguvad l\u00e4bi selle.<\/p>\n<p><i>Liigume koodimise juurde.<\/i><\/p>\n<p>Kuna postitust ei ole m\u00f5tet koormata koodiga, toon allpool vaid osad, lingi t\u00e4ismahud on allpool.<\/p>\n<p>Alustame \u00fcldmoduuliga common.<\/p>\n<p>Selles on \u00fchised osad \u2013 s\u00fcndmus (class CreatedTradeEvent). Pange t\u00e4hele, et nimetus on tegelikult selle meeskonna nimi, mis p\u00f5hjustas selle s\u00fcndmuse, kuid minevikus. Minevikus, kuna alguses esineb meeskond, mis viib s\u00fcndmuse loomisele.<\/p>\n<p>Teiste \u00fcldiste struktuuride hulka kuuluvad klassid positsiooni (class Position), tehingu (class Trade) ja tehingu pool (enum Side) kirjeldamiseks, st ost v\u00f5i m\u00fc\u00fck.<\/p>\n<p>Liigume mooduli tradeCreator juurde. <\/p>\n<p>Sellel moodulil on Rest-liides (class TradeController) tehingute vastuv\u00f5tmiseks. <br \/>\nSaadud tehingust moodustatakse k\u00e4sk 'looge tehing' ja saadetakse axon-serverisse.<\/p>\n<pre><code class=\"java\">    @PostMapping(\"\/trade\")\n    public ResponseEntity create(@RequestBody Trade trade) {\n        var createTradeCommand = CreateTradeCommand.builder()\n                .tradeId(trade.getTradeId())\n\t...\n                .build();\n        var result = commandGateway.sendAndWait(createTradeCommand, 3, TimeUnit.SECONDS);\n        return ResponseEntity.ok(result.get().toString());\n    }\n<\/code><\/pre>\n<p>\nK\u00e4su t\u00f6\u00f6tlemiseks kasutatakse klassi class TradeAggregate. <br \/>\nKuna Axon peab seda leidma, paneme annotatsiooni @Aggregate.<br \/>\nK\u00e4skude t\u00f6\u00f6tlemise meetod n\u00e4eb v\u00e4lja selline (l\u00fchendatult):<\/p>\n<pre><code class=\"java\">    @CommandHandler\n    public TradeAggregate(CreateTradeCommand command) {\n        log.info(\"command: {}\", command);\n        var event = CreatedTradeEvent.builder()\n                .tradeId(command.tradeId())\n\t\t....\n                .build();\n        AggregateLifecycle.apply(event);\n    }\n<\/code><\/pre>\n<p>\nK\u00e4sust moodustatakse s\u00fcndmus ja saadetakse serverisse.<br \/>\nK\u00e4sk asub klassis CreateTradeCommand.<\/p>\n<p>N\u00fc\u00fcd vaatame viimasest moodulist tradeQueries.<\/p>\n<p>Valikud on kirjeldatud paketis queries.<br \/>\nSelles moodulis on samuti Rest-liides.<br \/>\npublic class TradeController.<\/p>\n<p>N\u00e4itena vaatame p\u00e4ringu t\u00f6\u00f6tlemist: \"n\u00e4ita k\u00f5iki tehinguid.\"<\/p>\n<pre><code class=\"java\">    @GetMapping(\"\/trade\/all\")\n    public List findAllTrades() {\n        return queryGateway.query(new FindAllTradesQuery(),\n                ResponseTypes.multipleInstancesOf(Trade.class)).join();\n    }\n<\/code><\/pre>\n<p>\nK\u00e4iakse p\u00e4ring ja saadetakse serverisse.<\/p>\n<p>P\u00e4ringu t\u00f6\u00f6tlemiseks kasutatakse klassi TradesEventHandler.<br \/>\nSeal on meetod, millele on lisatud annotatsioon.<\/p>\n<pre><code class=\"java\">   @QueryHandler\n    public List handleFindCurrentPositionQuery(FindCurrentPositionQuery query)\n<\/code><\/pre>\n<p>\nJust tema vastutab andmete valimise eest in-memory salvestusest.<\/p>\n<p>K\u00fcsimus on, kuidas selles salvestuses teave uuendatakse. <\/p>\n<p>Alustame faktist, et see on lihtsalt komplekt ConcurrentHashMap'e, mis on kohandatud konkreetsete valikute jaoks. <br \/>\nNende v\u00e4rskendamiseks rakendatakse meetodit:<\/p>\n<pre><code class=\"java\">    @EventHandler\n    public void on(CreatedTradeEvent event) {\n        log.info(\"event:{}\", event);\n\n        var trade = Trade.builder()\n\t...\n                .build();\n        trades.put(event.tradeId(), trade);\n        position.merge(event.shortName(), event.size(),\n                (oldValue, value) -&gt; event.side() == Side.BUY ? oldValue + value : oldValue - value);\n    }<\/code><\/pre>\n<p>\nTa aktsepteerib s\u00fcndmust 'tehing loodud' ja uuendab kaarte.<\/p>\n<p>Need on mikroteenuste arenduse p\u00f5hijooned.<\/p>\n<p><i>Mida saab \u00f6elda Axoni puuduste kohta?<\/i><\/p>\n<p>Esiteks, see keerustab infrastruktuuri, tekib t\u00f5rke koht \u2013 Axon-server, k\u00f5ik suhtlused k\u00e4ivad l\u00e4bi selle. <\/p>\n<p>Teiseks, ilmneb selgelt sarnaste jaotatud s\u00fcsteemide puuduj\u00e4\u00e4k \u2013 andmete ajutine j\u00e4rjepidevus. Meie puhul v\u00f5ib uue tehingu saamise ja andmete uuendamise vahel minna lubamatult palju aega.<\/p>\n<p><i>Mis j\u00e4i varju?<\/i><\/p>\n<p>Ei ole midagi \u00f6eldud Event Sourcingi ja CQRS-i kohta, mis need on ja milleks neid vajatakse.<br \/>\nIlma nende m\u00f5istete selgitamiseta v\u00f5ivad m\u00f5ned punktid j\u00e4\u00e4da arusaamatuks.<\/p>\n<p>V\u00f5ib-olla vajavad ka m\u00f5ned koodifragmentid selgitamist.<\/p>\n<p>Sellest r\u00e4\u00e4gime <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/WrwW\/\">avatud veebinaril<\/a><\/noindex> 21. septembril.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/petrelevich\/jvm-digging\/tree\/master\/eventSourcing\/axonTrader\">T\u00e4ielik n\u00e4ide<\/a><\/noindex>.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/519144\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 Spring Boot \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Axon. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0415\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0434\u0435\u043b\u043e\u043a \u043d\u0430 \u0444\u043e\u043d\u0434\u043e\u0432\u043e\u043c \u0440\u044b\u043d\u043a\u0435. \u042d\u0442\u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e Rest-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \u041d\u0430\u043c \u043d\u0430\u0434\u043e \u044d\u0442\u0438 \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0435 in-memory \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":94394,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-94393","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 Spring Boot \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Axon. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0415\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0434\u0435\u043b\u043e\u043a \u043d\u0430 \u0444\u043e\u043d\u0434\u043e\u0432\u043e\u043c \u0440\u044b\u043d\u043a\u0435. \u042d\u0442\u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e Rest-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \u041d\u0430\u043c \u043d\u0430\u0434\u043e \u044d\u0442\u0438 \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0435 in-memory \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 Axon | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 Spring Boot \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Axon. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0415\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0434\u0435\u043b\u043e\u043a \u043d\u0430 \u0444\u043e\u043d\u0434\u043e\u0432\u043e\u043c \u0440\u044b\u043d\u043a\u0435. \u042d\u0442\u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e Rest-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \u041d\u0430\u043c \u043d\u0430\u0434\u043e \u044d\u0442\u0438 \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0435 in-memory \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-16T05:43:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-16T05:43:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Mikroteenused Axoni kaudu | ProHoster","description":"Selles lihtsas \u00f5petuses loome paar mikroteenust Spring Bootis ja organiseerime nende vahelist suhtlemist Axoni raamistiku kaudu. Kujutame ette, et meil on selline \u00fclesanne. On olemas tehingute allikas aktsiaturul. See allikas edastab meile tehingud REST-liidese kaudu. Me peame need tehingud saama, salvestama andmebaasi ja looma mugava in-memory ladustamise. See ladustamine peab t\u00e4itma","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 Axon | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 Spring Boot \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Axon. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0415\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0434\u0435\u043b\u043e\u043a \u043d\u0430 \u0444\u043e\u043d\u0434\u043e\u0432\u043e\u043c \u0440\u044b\u043d\u043a\u0435. \u042d\u0442\u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e Rest-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \u041d\u0430\u043c \u043d\u0430\u0434\u043e \u044d\u0442\u0438 \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0435 in-memory \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-16T05:43:43+00:00","article:modified_time":"2020-09-16T05:43:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"94393","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:27:34","updated":"2022-10-02 06:08:26"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/94393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=94393"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/94393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/94394"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=94393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=94393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=94393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}