{"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\/sq\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon","title":{"rendered":"Mikrosh\u00ebrbimet me komunikim p\u00ebrmes Axon","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>N\u00eb k\u00ebt\u00eb tutorial t\u00eb thjesht\u00eb do t\u00eb krijojm\u00eb disa mikrosh\u00ebrbime n\u00eb Spring Boot dhe do t\u00eb organizojm\u00eb nd\u00ebrveprimin mes tyre p\u00ebrmes korniz\u00ebs Axon.<\/p>\n<p><img decoding=\"async\" alt=\"Mikrosh\u00ebrbimet me komunikim p\u00ebrmes 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>Supozoni se kemi nj\u00eb detyr\u00eb t\u00eb till\u00eb.<\/i><\/p>\n<p>Ka nj\u00eb burim transaksionesh n\u00eb tregun financiar. Ky burim na d\u00ebrgon transaksione p\u00ebrmes nj\u00eb nd\u00ebrfaqeje Rest. <\/p>\n<p>Na nevojitet t\u00eb marrim k\u00ebto transaksione, t'i ruajm\u00eb n\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash dhe t\u00eb krijojm\u00eb nj\u00eb magazin\u00eb in-memory t\u00eb leverdishme. <\/p>\n<p>Kjo magazin\u00eb duhet t\u00eb kryej\u00eb funksionet e m\u00ebposhtme:<\/p>\n<ul>\n<li> t\u00eb kthej\u00eb nj\u00eb list\u00eb tregtare;<\/li>\n<li> t\u00eb kthej\u00eb pozitat e plota, dmth. tabela \"instrument\" \u2013 \"sasia aktuelle e letrave t\u00eb \u00e7mimit\";<\/li>\n<li> t\u00eb kthej\u00eb pozitat p\u00ebr nj\u00eb instrument t\u00eb caktuar.<\/li>\n<\/ul>\n<p>\n<i>Si do ta qasnim zgjidhjen e k\u00ebsaj detyre? <\/i><\/p>\n<p>Sipas besimeve t\u00eb mod\u00ebs mikrosh\u00ebrbimore, na nevojitet t\u00eb ndajm\u00eb detyr\u00ebn n\u00eb mikrosh\u00ebrbime p\u00ebrb\u00ebr\u00ebse:<\/p>\n<ul>\n<li> marrja e transaksioneve p\u00ebrmes Rest-it;<\/li>\n<li> ruajtja e transaksioneve n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave;<\/li>\n<li> magazina in-memory p\u00ebr paraqitjen e t\u00eb dh\u00ebnave mbi pozitat.<\/li>\n<\/ul>\n<p>\nLe t\u00eb krijojm\u00eb n\u00eb kuad\u00ebr t\u00eb k\u00ebtij tutoriali sh\u00ebrbimin e par\u00eb dhe t\u00eb tret\u00eb, nd\u00ebrsa t\u00eb dytin ta l\u00ebm\u00eb p\u00ebr pjes\u00ebn e dyt\u00eb (n\u00eb komentet n\u00ebse kjo \u00ebsht\u00eb interesante).<\/p>\n<p>Pra, kemi dy mikrosh\u00ebrbime. <\/p>\n<p>I pari merr t\u00eb dh\u00ebnat nga jasht\u00eb. <\/p>\n<p>I dyti i p\u00ebrpunon k\u00ebto t\u00eb dh\u00ebna dhe p\u00ebrgjigjet n\u00eb k\u00ebrkesat q\u00eb vijn\u00eb. <\/p>\n<p>Natyrisht, duam t\u00eb arrijm\u00eb shkall\u00ebzim horizontal, p\u00ebrdit\u00ebsim pa nd\u00ebrprerje dhe p\u00ebrfitime t\u00eb tjera t\u00eb mikrosh\u00ebrbimeve.<\/p>\n<p><i>Cila \u00ebsht\u00eb, nj\u00eb detyr\u00eb shum\u00eb e komplikuar, q\u00eb na pret?<\/i><\/p>\n<p>N\u00eb fakt, ka shum\u00eb, por tani le t\u00eb flasim se si do t\u00eb kalojn\u00eb t\u00eb dh\u00ebnat mes k\u00ebtyre mikrosh\u00ebrbimeve. Nd\u00ebr to gjithashtu mund t\u00eb b\u00ebjm\u00eb Rest, mund t\u00eb vendosim ndonj\u00eb radh\u00eb, mund t\u00eb inventojm\u00eb shum\u00eb gj\u00ebra me avantazhet dhe disavantazhet e tyre.<\/p>\n<p>Le t\u00eb shqyrtojm\u00eb nj\u00eb nga qasjet e mundshme \u2013 nd\u00ebrveprimin asinkron p\u00ebrmes <b>korniz\u00ebs Axon<\/b>.<\/p>\n<p><i>Cilat jan\u00eb p\u00ebrfitimet e k\u00ebtij zgjidhjeje?<\/i><\/p>\n<p>S\u00eb pari, nd\u00ebrveprimi asinkron rrit fleksibilitetin (po, ka k\u00ebtu edhe nj\u00eb disavantazh, por ne p\u00ebr momentin jemi vet\u00ebm p\u00ebr p\u00ebrfitimet). <\/p>\n<p>S\u00eb dyti, direkt nga kutia ne marrim <b>Event Sourcing<\/b> dhe <b>CQRS<\/b>. <br \/>\nS\u00eb treti, Axon ofron nj\u00eb infrastruktur\u00eb gati, dhe na nevojitet t\u00eb p\u00ebrqendrohemi vet\u00ebm n\u00eb zhvillimin e logjik\u00ebs biznesore.<\/p>\n<p>Le t\u00eb fillojm\u00eb.<\/p>\n<p>Projektin do ta kemi n\u00eb gradle. Do t\u00eb ket\u00eb tri module: <\/p>\n<ul>\n<li> common. modul me struktura t\u00eb p\u00ebrbashk\u00ebta t\u00eb t\u00eb dh\u00ebnave (ne nuk e duam kopjimin);<\/li>\n<li> tradeCreator. modul me mikrosh\u00ebrbimin p\u00ebr pranimin e transaksioneve p\u00ebrmes Rest;<\/li>\n<li> tradeQueries. modul me mikrosh\u00ebrbimin p\u00ebr p\u00ebrfaq\u00ebsimin e pozitat.<\/li>\n<\/ul>\n<p>\nDo ta marrim Spring Boot si baz\u00eb dhe do t\u00eb lidhim starterin e Axon.<\/p>\n<p>Axon punon shk\u00eblqyer edhe pa Spring, por do t'i p\u00ebrdorim ato s\u00eb bashku.<\/p>\n<p>K\u00ebtu duhet t\u00eb ndalemi dhe t\u00eb themi disa fjal\u00eb rreth Axon. <\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb sistem klient-server. Ka nj\u00eb server \u2013 ky \u00ebsht\u00eb nj\u00eb aplikacion i ve\u00e7ant\u00eb, do ta lansojm\u00eb at\u00eb n\u00eb docker. <\/p>\n<p>Dhe ka klient\u00eb, t\u00eb cil\u00ebt integrohen n\u00eb mikrosh\u00ebrbime. <br \/>\nK\u00ebshtu q\u00eb kemi nj\u00eb pamje t\u00eb till\u00eb. Fillimisht, lansojm\u00eb serverin Axon (n\u00eb docker), pastaj mikrosh\u00ebrbimet tona. <\/p>\n<p>Kur startohen, mikrosh\u00ebrbimet k\u00ebrkojn\u00eb serverin dhe fillojn\u00eb t\u00eb nd\u00ebrveprojn\u00eb me t\u00eb. Nd\u00ebrveprimi mund t\u00eb ndahet n\u00eb dy lloje: teknik dhe biznesor. <\/p>\n<p>Technical \u2013 \u00ebsht\u00eb shk\u00ebmbimi i mesazheve \u00abun\u00eb jam gjall\u00eb\u00bb (k\u00ebto mesazhe mund t\u00eb shihen n\u00eb modalitetin e regjistrimit debug). <\/p>\n<p>Biznesor \u2013 \u00ebsht\u00eb shk\u00ebmbimi i mesazheve si \u00abtransaksion i ri\u00bb.<\/p>\n<p>Nj\u00eb ve\u00e7ori e r\u00ebnd\u00ebsishme, pas lansimit mikrosh\u00ebrbimi mund t\u00eb pyes\u00eb serverin Axon \u00ab\u00e7far\u00eb ndodhi\u00bb dhe serveri i d\u00ebrgon mikrosh\u00ebrbimit ngjarjet e akumuluara. K\u00ebshtu, mikrosh\u00ebrbimi mund t\u00eb rihapet relativisht n\u00eb siguri pa humbje t\u00eb dh\u00ebnash. <br \/>\nMe k\u00ebt\u00eb skem\u00eb shk\u00ebmbimi mund t\u00eb lancojm\u00eb shum\u00eb instanca t\u00eb mikrosh\u00ebrbimeve shum\u00eb leht\u00eb, <br \/>\nnd\u00ebrsa n\u00eb hoste t\u00eb ndryshme.<\/p>\n<p>Po, nj\u00eb instanc\u00eb e serverit Axon \u2013 nuk \u00ebsht\u00eb e besueshme, por k\u00ebshtu \u00ebsht\u00eb p\u00ebr momentin.<\/p>\n<p>Ne punojm\u00eb n\u00eb paradigm\u00ebn e Event Sourcing dhe CQRS. Kjo do t\u00eb thot\u00eb se ne duhet t\u00eb kemi \u00abkomanda\u00bb, \u00abngjarje\u00bb dhe \u00abselektime\u00bb. <\/p>\n<p>Do t\u00eb kemi nj\u00eb komand\u00eb: \u00abkrijo transaksion\u00bb, nj\u00eb ngjarje \u00abtransaksioni i krijuar\u00bb dhe tri selektime: \u00abtrego t\u00eb gjitha transaksionet\u00bb, \u00abtrego pozita\u00bb, \u00abtrego pozita sipas instrumentit\u00bb.<\/p>\n<p>Skema e pun\u00ebs rezulton t\u00eb jet\u00eb k\u00ebshtu: <\/p>\n<ol>\n<li> Mikrosh\u00ebrbimi tradeCreator pranon nj\u00eb transaksion p\u00ebrmes Rest.<\/li>\n<li> Mikrosh\u00ebrbimi tradeCreator krijon nj\u00eb komand\u00eb \u00abkrijo transaksion\u00bb dhe e d\u00ebrgon at\u00eb n\u00eb serverin Axon.<\/li>\n<li> Serveri Axon pranon komand\u00ebn dhe e d\u00ebrgon at\u00eb te marr\u00ebsi i interesuar, n\u00eb rastin ton\u00eb \u00ebsht\u00eb mikrosh\u00ebrbimi tradeCreator.<\/li>\n<li> Mikrosh\u00ebrbimi tradeCreator merr komand\u00ebn, formon ngjarjen \u00abtransaksioni i krijuar\u00bb dhe e d\u00ebrgon at\u00eb n\u00eb serverin Axon.<\/li>\n<li> Serveri Axon pranon ngjarjen dhe e d\u00ebrgon te abonnent\u00ebt e interesuar.<\/li>\n<li> Aktualisht kemi vet\u00ebm nj\u00eb marr\u00ebs t\u00eb interesuar \u2013 \u00ebsht\u00eb mikrosh\u00ebrbimi tradeQueries.<\/li>\n<li> Mikrosh\u00ebrbimi tradeQueries merr ngjarjen dhe p\u00ebrdit\u00ebson t\u00eb dh\u00ebnat e brendshme.<\/li>\n<\/ol>\n<p>\n(\u00cbsht\u00eb e r\u00ebnd\u00ebsishme q\u00eb n\u00eb momentin e formimit t\u00eb ngjarjes, Mikrosh\u00ebrbimi tradeQueries mund t\u00eb mos jet\u00eb i aksesuesh\u00ebm, por sapo t\u00eb nis\u00eb, do t\u00eb marr\u00eb menj\u00ebher\u00eb ngjarjen).<\/p>\n<p>Po, serveri axon q\u00ebndron n\u00eb qend\u00ebr t\u00eb komunikimeve, t\u00eb gjitha mesazhet kalojn\u00eb p\u00ebrmes tij.<\/p>\n<p><i>Le t\u00eb kalojm\u00eb n\u00eb kodim.<\/i><\/p>\n<p>P\u00ebr t\u00eb mos e mbushur postimin me kod, m\u00eb posht\u00eb do t\u00eb paraqes vet\u00ebm fragmente, lidhja p\u00ebr shembullin e plot\u00eb do t\u00eb jet\u00eb m\u00eb posht\u00eb.<\/p>\n<p>T\u00eb fillojm\u00eb me modul t\u00eb p\u00ebrbashk\u00ebt common.<\/p>\n<p>N\u00eb t\u00eb, pjes\u00ebt e p\u00ebrbashk\u00ebta jan\u00eb ngjarja (class CreatedTradeEvent). Vini re em\u00ebrtimin, n\u00eb thelb, kjo \u00ebsht\u00eb emri i komand\u00ebs q\u00eb e gjeneroi k\u00ebt\u00eb ngjarje, por n\u00eb koh\u00ebn e kaluar. N\u00eb koh\u00ebn e kaluar, sepse s\u00eb pari shfaqet komanda, e cila \u00e7on n\u00eb krijimin e ngjarjes.<\/p>\n<p>Strukturat e tjera t\u00eb p\u00ebrbashk\u00ebta p\u00ebrfshijn\u00eb klasat p\u00ebr p\u00ebrshkrimin e pozicioneve (class Position), tregtis\u00eb (class Trade) dhe an\u00ebn e tregtis\u00eb (enum Side), q\u00eb do t\u00eb thot\u00eb, blerje ose shitje.<\/p>\n<p>T\u00eb kalojm\u00eb te moduli tradeCreator. <\/p>\n<p>Ky modul ka nj\u00eb interfes\u00eb Rest (class TradeController) p\u00ebr t\u00eb pranuar tregti. <br \/>\nNga tregtia e marr\u00eb krijohet komanda \"krijo tregti\" dhe d\u00ebrgohet n\u00eb serverin axon.<\/p>\n<pre><code class=\"java\">    @PostMapping(&quot;\/trade&quot;)\n    public ResponseEntity&lt;String&gt; 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>\nP\u00ebr p\u00ebrpunimin e komand\u00ebs p\u00ebrdoret klasa class TradeAggregate. <br \/>\nP\u00ebr ta gjetur Axon, vendosim anotacionin @Aggregate.<br \/>\nMetoda p\u00ebr p\u00ebrpunimin e komand\u00ebs duket k\u00ebshtu (me shkurtim):<\/p>\n<pre><code class=\"java\">    @CommandHandler\n    public TradeAggregate(CreateTradeCommand command) {\n        log.info(&quot;command: {}&quot;, 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>\nNga komanda krijohet nj\u00eb ngjarje dhe d\u00ebrgohet n\u00eb server.<br \/>\nKomanda gjendet n\u00eb klas\u00ebn CreateTradeCommand.<\/p>\n<p>Tani t\u00eb shikojm\u00eb modulin e fundit tradeQueries.<\/p>\n<p>Selekternet p\u00ebrshkruhen n\u00eb paket\u00ebn queries.<br \/>\nN\u00eb k\u00ebt\u00eb modul ka gjithashtu nj\u00eb interfes\u00eb Rest.<br \/>\npublic class TradeController.<\/p>\n<p>Si shembull, le t\u00eb shohim p\u00ebrpunimin e k\u00ebrkes\u00ebs: \"trego t\u00eb gjitha tregtit\u00eb\".<\/p>\n<pre><code class=\"java\">    @GetMapping(&quot;\/trade\/all&quot;)\n    public List&lt;Trade&gt; findAllTrades() {\n        return queryGateway.query(new FindAllTradesQuery(),\n                ResponseTypes.multipleInstancesOf(Trade.class)).join();\n    }\n<\/code><\/pre>\n<p>\nKrijohet nj\u00eb k\u00ebrkes\u00eb p\u00ebr selektim dhe d\u00ebrgohet n\u00eb server.<\/p>\n<p>P\u00ebr p\u00ebrpunimin e k\u00ebrkes\u00ebs p\u00ebr selektim p\u00ebrdoret klasa TradesEventHandler.<br \/>\nN\u00eb t\u00eb ka nj\u00eb metod\u00eb e cila \u00ebsht\u00eb e sh\u00ebnuar me anotacionin<\/p>\n<pre><code class=\"java\">   @QueryHandler\n    public List handleFindCurrentPositionQuery(FindCurrentPositionQuery query)\n<\/code><\/pre>\n<p>\nAi \u00ebsht\u00eb ai q\u00eb \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr selektimin e t\u00eb dh\u00ebnave nga depoja in-memory.<\/p>\n<p>Cila \u00ebsht\u00eb pyetja se si p\u00ebrdit\u00ebsohet informata n\u00eb k\u00ebt\u00eb depo. <\/p>\n<p>T\u00eb fillojm\u00eb me at\u00eb q\u00eb kjo \u00ebsht\u00eb thjesht nj\u00eb grup ConcurrentHashMap, t\u00eb dizajnuara p\u00ebr selektime t\u00eb caktuara. <br \/>\nP\u00ebr p\u00ebrdit\u00ebsimin e tyre aplikohet metoda:<\/p>\n<pre><code class=\"java\">    @EventHandler\n    public void on(CreatedTradeEvent event) {\n        log.info(&quot;event:{}&quot;, 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>\nAi merr t\u00eb dh\u00ebn\u00ebn \"n\u00eb krijimin e tregtis\u00eb\" dhe azhurnon hartat.<\/p>\n<p>K\u00ebto jan\u00eb piketat kryesore t\u00eb zhvillimit t\u00eb mikrosh\u00ebrbimeve.<\/p>\n<p><i>\u00c7far\u00eb mund t\u00eb thuhet p\u00ebr mang\u00ebsit\u00eb e Axon?<\/i><\/p>\n<p>S\u00eb pari, kjo nd\u00ebrlikon infrastruktur\u00ebn, duke krijuar nj\u00eb pik\u00eb d\u00ebshtimi \u2013 serverin Axon, t\u00eb gjitha komunikimet kalojn\u00eb p\u00ebrmes tij. <\/p>\n<p>S\u00eb dyti, shfaqet shum\u00eb qart\u00eb mang\u00ebsia e sistemeve t\u00eb tilla t\u00eb shp\u00ebrndara \u2013 koh\u00ebzgjatja e pamjaftueshme e informacionit. N\u00eb rastin ton\u00eb, mes marrjes s\u00eb nj\u00eb tregtie t\u00eb re dhe azhurnimit t\u00eb t\u00eb dh\u00ebnave p\u00ebr zgjedhjet mund t\u00eb kaloj\u00eb nj\u00eb koh\u00eb e papranueshme.<\/p>\n<p><i>\u00c7far\u00eb mbeti jasht\u00eb sken\u00ebs?<\/i><\/p>\n<p>Nuk u tha fare p\u00ebr Event Sourcing dhe CQRS, \u00e7far\u00eb jan\u00eb dhe p\u00ebr \u00e7far\u00eb nevojiten.<br \/>\nPa sqarimin e k\u00ebtyre koncepteve, disa pika mund t\u00eb ken\u00eb mbetur t\u00eb paqart\u00eb.<\/p>\n<p>Mund t\u00eb jet\u00eb q\u00eb fragmente t\u00eb caktuara t\u00eb kodit k\u00ebrkojn\u00eb gjithashtu sqarime.<\/p>\n<p>P\u00ebr k\u00ebt\u00eb do t\u00eb flasim n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/WrwW\/\">webinarin e hapur<\/a><\/noindex> m\u00eb 21 Shtator.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/petrelevich\/jvm-digging\/tree\/master\/eventSourcing\/axonTrader\">Shembulli i plot\u00eb<\/a><\/noindex>.<br \/>\n<br \/>Burimi: <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\/sq\/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=\"sq_AL\" \/>\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\/sq\/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\udd47Mikrosh\u00ebrbimet me komunikim p\u00ebrmes Axon | ProHoster","description":"N\u00eb k\u00ebt\u00eb tutorial t\u00eb thjesht\u00eb do t\u00eb krijojm\u00eb disa mikrosh\u00ebrbime n\u00eb Spring Boot dhe do t\u00eb organizojm\u00eb nd\u00ebrveprimin mes tyre p\u00ebrmes korniz\u00ebs Axon.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/mikroservisy-s-kommunikacziej-cherez-axon","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/94393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=94393"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/94393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/94394"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=94393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=94393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=94393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}