{"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":"Microservices communicating via Axon","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Selles lihtsas juhendis loome paar mikroteenust Spring Booti abil ja organiseerime nende vahelise suhtluse Axon raamistikuga.<\/p>\n<p><img decoding=\"async\" alt=\"Microservices communicating via Axon\" 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 b\u00f6rsil. See allikas edastab meile tehingud REST liidese kaudu. <\/p>\n<p>Me peame need tehingud k\u00e4tte saama, andmebaasi salvestama ja looma mugava in-memory salvestuss\u00fcsteemi. <\/p>\n<p>See salvestuss\u00fcsteem peab t\u00e4itma j\u00e4rgmisi funktsioone:<\/p>\n<ul>\n<li> tagastama tehingute loendi;<\/li>\n<li> tagastama t\u00e4ieliku positsiooni, st tabeli \"vahend\" \u2014 \"praegune aktsiate arv\";<\/li>\n<li> tagastama positsiooni antud vahendi kohta.<\/li>\n<\/ul>\n<p>\n<i>Kuidas me sellele \u00fclesandele l\u00e4heneme? <\/i><\/p>\n<p>Mikroteenuste moodi kohaselt peame \u00fclesande jagama komponentideks mikroteenusteks:<\/p>\n<ul>\n<li> saama tehingud RESTi kaudu;<\/li>\n<li> salvestama tehingud andmebaasi;<\/li>\n<li> in-memory salvestuss\u00fcsteem positsioonide andmete esitlemiseks.<\/li>\n<\/ul>\n<p>\nK\u00e4esoleva juhendi raames loome esmase ja kolmanda teenuse, teise j\u00e4tame teise osa jaoks (kommentaaridesse kirjutage, kui see huvitab).<\/p>\n<p>Nii et meil on kaks mikroteenust. <\/p>\n<p>Esimene saadab andmeid v\u00e4ljast. <\/p>\n<p>Teine t\u00f6\u00f6tleb neid andmeid ja vastab sissetulevatele p\u00e4ringutele. <\/p>\n<p>Me tahame muidugi saavutada horisontaalset skaleeritavust, katkestusvaba v\u00e4rskendamist ja muid 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 n\u00fc\u00fcd sellest, kuidas andmed nende mikroteenuste vahel liiguvad. Nende vahel v\u00f5ib ka teha RESTi, kasutada m\u00f5nda j\u00e4rjekorda, v\u00e4lja m\u00f5elda palju muid asju oma plusside ja miinustega.<\/p>\n<p>Vaadakem \u00fchte v\u00f5imalikku l\u00e4henemist \u2013 as\u00fcnkroonset suhtlemist l\u00e4bi <b>Axon raamistik<\/b>.<\/p>\n<p><i>Millised on sellise lahenduse plussid?<\/i><\/p>\n<p>Esiteks, as\u00fcnkroonne suhtlemine suurendab paindlikkust (jah, siin on ka miinus, kuid r\u00e4\u00e4gime praegu ainult plussidest). <\/p>\n<p>Teiseks, saame otse v\u00e4lja arvatud <b>S\u00fcndmuste allikaks<\/b> ja <b>CQRS<\/b>. <br \/>\nKolmandaks, Axon annab valmis infrastruktuuri, nii et meie peame keskenduma ainult \u00e4riloogika arendamisele.<\/p>\n<p>Hakkame pihta.<\/p>\n<p>Projekt p\u00f5hineb gradle'il. See sisaldab kolm moodulit: <\/p>\n<ul>\n<li> common. moodul \u00fcldiste andmestruktuuridega (me ei armasta kopeerimist);<\/li>\n<li> tradeCreator. moodul mikroteenuse jaoks, et vastu v\u00f5tta tehinguid RESTi kaudu;<\/li>\n<li> tradeQueries. moodul mikroteenuse jaoks positsiooni kuvamiseks.<\/li>\n<\/ul>\n<p>\nV\u00f5tame aluseks Spring Booti ja \u00fchendame Axoni aluse.<\/p>\n<p>Axon t\u00f6\u00f6tab suurep\u00e4raselt ka ilma Springita, kuid me kasutame neid koos.<\/p>\n<p>Siin tasub peatuda ja paar s\u00f5na Axoni kohta r\u00e4\u00e4kida. <\/p>\n<p>See on klient-server s\u00fcsteem. On server \u2013 see on eraldi rakendus, mida k\u00e4ivitame Dockeris. <\/p>\n<p>Ja on kliendid, mis integreeruvad mikroteenustesse. <br \/>\nNii et pilt on j\u00e4rgmine. Esiteks k\u00e4ivitatakse Axon-server (Dockeris), seej\u00e4rel meie mikroteenused. <\/p>\n<p>K\u00e4ivitusel otsivad mikroteenused serverit ja hakkavad temaga suhtlema. Suhtlemine on tinglikult jagatud kaheks: tehniliseks ja \u00e4riliseks. <\/p>\n<p>Tehniline \u2013 see on s\u00f5numite vahetus \"ma olen elus\" (selliseid s\u00f5numeid v\u00f5ib n\u00e4ha debug-re\u017eiimis). <\/p>\n<p>\u00c4riline \u2013 see on s\u00f5numite vahetus nagu \"uus tehing\".<\/p>\n<p>Oluline omadus on see, et p\u00e4rast k\u00e4ivitamist v\u00f5ib mikroteenus k\u00fcsida Axon-serverilt \"mis juhtus\" ja server edastab mikroteenusele kogunenud s\u00fcndmused. Nii saab mikroteenus suhteliselt ohutult taask\u00e4ivituda ilma andmete kaota. <br \/>\nSellise suhtlemise skeemi puhul saame v\u00e4ga lihtsalt k\u00e4ivitada mitu mikroteenuse eksemplari, <br \/>\nisegi erinevates hostides.<\/p>\n<p>Jah, \u00fcks Axon-serveri eksemplar ei ole usaldusv\u00e4\u00e4rne, aga praegu on see nii.<\/p>\n<p>Me t\u00f6\u00f6tame Event Sourcing ja CQRS paradigmades. See t\u00e4hendab, et meil peavad olema 'k\u00e4sklused', 's\u00fcndmused' ja 'valikud'. <\/p>\n<p>Meil on \u00fcks k\u00e4sklus: 'loo tehing', \u00fcks s\u00fcndmus 'tehing loodud' ja kolm valikut: 'n\u00e4ita k\u00f5iki tehinguid', 'n\u00e4ita positsiooni', 'n\u00e4ita positsiooni t\u00f6\u00f6riista j\u00e4rgi'.<\/p>\n<p>T\u00f6\u00f6 skeem on j\u00e4rgmine: <\/p>\n<ol>\n<li> Mikroteenus tradeCreator v\u00f5tab tehingu vastu Rest kaudu.<\/li>\n<li> Mikroteenus tradeCreator loob k\u00e4skluse 'loo tehing' ja saadab selle Axon-serverile.<\/li>\n<li> Axon-server v\u00f5tab k\u00e4skluse vastu ja edastab selle huvitatud adressaadile, meie puhul mikroteenusele tradeCreator.<\/li>\n<li> Mikroteenus tradeCreator saab k\u00e4skluse, vormib s\u00fcndmuse 'tehing loodud' ja saadab selle Axon-serverile.<\/li>\n<li> Axon-server v\u00f5tab s\u00fcndmuse vastu ja edastab selle huvitatud tellijatele.<\/li>\n<li> Praegu on meil ainult \u00fcks huvitatud adressaat \u2013 mikroteenus tradeQueries.<\/li>\n<li> Mikroteenus tradeQueries saab s\u00fcndmuse ja uuendab siseandmeid.<\/li>\n<\/ol>\n<p>\n(Oluline, et s\u00fcndmuse loomise hetkel v\u00f5ib mikroteenus tradeQueries olla mitte k\u00e4ttesaadav, kuid niipea, kui ta k\u00e4ivitub, saab ta kohe s\u00fcndmuse).<\/p>\n<p>Jah, axon-server on suhtluse keskmes, k\u00f5ik s\u00f5numid l\u00e4hevad l\u00e4bi selle.<\/p>\n<p><i>Hakake edasi kodeerimisele.<\/i><\/p>\n<p>Kuna postitust ei taha koormata koodiga, toon allpool ainult fragmendid, link t\u00e4ispikale n\u00e4itele tuleb samuti allpool.<\/p>\n<p>Alustame \u00fcldise mooduliga common.<\/p>\n<p>Selles on \u00fcldised osad - see on s\u00fcndmus (class CreatedTradeEvent). Pange t\u00e4hele nimetust, see on p\u00f5him\u00f5tteliselt meeskonna nimi, mis selle s\u00fcndmuse tekitas, kuid minevikuvormis. Minevikuvormis, kuna k\u00f5igepealt tekib meeskond, mis viib s\u00fcndmuse loomiseni.<\/p>\n<p>Teiste \u00fcldiste struktuuride hulka kuuluvad klassid positsiooni kirjeldamiseks (class Position), tehingu (class Trade) ja tehingu pool (enum Side), st ost v\u00f5i m\u00fc\u00fck.<\/p>\n<p>Liigume tradeCreator moodulisse. <\/p>\n<p>Selles moodulis on Rest-liidese (class TradeController) jaoks tehingute vastuv\u00f5tmise v\u00f5imalus. <br \/>\nSaadud tehingust moodustatakse k\u00e4sk \u00abloo tehing\u00bb 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\u00e4sku t\u00f6\u00f6deldakse klassi class TradeAggregate abil. <br \/>\nKuna Axon peab selle leidma, asetame 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\u00e4skude p\u00f5hjal moodustatakse s\u00fcndmus ja saadetakse serverisse.<br \/>\nK\u00e4sk asub klassis CreateTradeCommand.<\/p>\n<p>N\u00fc\u00fcd vaatame viimast moodulit tradeQueries.<\/p>\n<p>K\u00fcsimused on kirjeldatud paketis queries.<br \/>\nSelles moodulis on samuti Rest-liides.<br \/>\npublic class TradeController.<\/p>\n<p>N\u00e4iteks vaatame p\u00e4ringute t\u00f6\u00f6tlemist: \u00abn\u00e4ita k\u00f5iki tehinguid\u00bb.<\/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>\nLoetakse p\u00e4ring valiku tegemiseks ja saadetakse serverisse.<\/p>\n<p>P\u00e4ringu t\u00f6\u00f6tlemiseks kasutatakse klassi TradesEventHandler.<br \/>\nSelles on meetod, mis on m\u00e4rgitud annotatsiooniga.<\/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 andmehoidlast.<\/p>\n<p>K\u00fcsimus on, kuidas selles andmehoidlas uut teavet uuendatakse. <\/p>\n<p>Alustame sellest, et see on lihtsalt hulk ConcurrentHashMap'e, mis on suunatud konkreetsetele p\u00e4ringutele. <br \/>\nNende uuendamiseks kasutatakse 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>\nSee s\u00fcndmus \"kaubanduse loomine\" ja uuendab kaardid.<\/p>\n<p>Need on mikroteenuste arendamise peamised punktid.<\/p>\n<p><i>Mida saab \u00f6elda Axoni puuduste kohta?<\/i><\/p>\n<p>Esiteks, see keerustab infrastruktuuri, tekib rikke punkt \u2013 Axon server, k\u00f5ik suhtlused k\u00e4ivad l\u00e4bi selle. <\/p>\n<p>Teiseks, sarnaste hajutatud s\u00fcsteemide puudus avaldub selgelt \u2013 andmete ajutine konsistentsus. Meie puhul v\u00f5ib uue tehingu saamise ja andmete uuendamise vahel l\u00e4bida liiga palju aega.<\/p>\n<p><i>Mis j\u00e4i varju?<\/i><\/p>\n<p>Kohapeal ei ole midagi \u00f6eldud Event Sourcing ja CQRS kohta, mis need on ja milleks neid vaja on.<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 koodifragmendid 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 5.0.1.1 - 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.\" \/>\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) 5.0.1.1\" \/>\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.\" \/>\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 kommunikatsiooniga Axoni kaudu | ProHoster","description":"Selles lihtsas juhendis loome paar mikroteenust Spring Booti abil ja organiseerime nende vahelise suhtluse Axon raamistikuga.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}