{"id":74795,"date":"2020-03-20T20:42:21","date_gmt":"2020-03-20T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie"},"modified":"2020-03-20T20:42:21","modified_gmt":"2020-03-20T17:42:21","slug":"kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Hogyan egyes\u00edti a Quarkus az imperat\u00edv \u00e9s reakt\u00edv programoz\u00e1st","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Id\u00e9n komolyan tervezz\u00fck a kont\u00e9neres t\u00e9m\u00e1k el\u0151mozd\u00edt\u00e1s\u00e1t, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Cloud-Native Java<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Ennek a t\u00e9m\u00e1nak a logikus folytat\u00e1sa a Quarkus keretr\u0151l sz\u00f3l\u00f3 besz\u00e1mol\u00f3, amelyet m\u00e1r <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">\u00e1ttekintett\u00fcnk<\/a><\/noindex> a Habr-on. A mai cikk nem annyira a \u201eszubatomi szupergyors Java\u201d m\u0171k\u00f6d\u00e9s\u00e9re vonatkozik, hanem arra a perspekt\u00edv\u00e1ra, amelyet a Quarkus az Enterprise-ba hoz.<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan egyes\u00edti a Quarkus az imperat\u00edv \u00e9s reakt\u00edv programoz\u00e1st\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA Java \u00e9s a JVM tov\u00e1bbra is rendk\u00edv\u00fcl n\u00e9pszer\u0171, de a serverless technol\u00f3gi\u00e1k \u00e9s a felh\u0151alap\u00fa mikroszolg\u00e1ltat\u00e1sok ter\u00e9n egyre ritk\u00e1bban haszn\u00e1lj\u00e1k a Java-t \u00e9s a JVM m\u00e1s nyelveit, mivel t\u00fal sok mem\u00f3ri\u00e1t foglalnak el \u00e9s t\u00fal lassan t\u00f6ltenek be, \u00edgy nem alkalmasak a r\u00f6vid \u00e9let\u0171 kont\u00e9nerekkel val\u00f3 haszn\u00e1latra. Szerencs\u00e9re mostanra ez a helyzet kezd v\u00e1ltozni a Quarkus-nak k\u00f6sz\u00f6nhet\u0151en.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>A szupergyors szubatomi Java \u00faj szintre l\u00e9pett!<\/h3>\n<p>\n42 kiad\u00e1s, 8 h\u00f3nap k\u00f6z\u00f6ss\u00e9gi munka \u00e9s 177 leny\u0171g\u00f6z\u0151 fejleszt\u0151 \u2013 mindez november 2019-ben a Quarkus 1.0 kiad\u00e1shoz vezetett, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">, amely m\u00e9rf\u00f6ldk\u0151 a projekt fejl\u0151d\u00e9s\u00e9ben, \u00e9s sz\u00e1mos klassz funkci\u00f3t \u00e9s lehet\u0151s\u00e9get k\u00edn\u00e1l (t\u00f6bbet olvashat a<\/a><\/noindex>Ma arr\u00f3l besz\u00e9l\u00fcnk, hogyan egyes\u00edti a Quarkus az imperat\u00edv \u00e9s reakt\u00edv programoz\u00e1si modelleket egyetlen reakt\u00edv mag k\u00f6r\u00e9. Kezdj\u00fck egy r\u00f6vid t\u00f6rt\u00e9neti \u00e1ttekint\u00e9ssel, majd r\u00e9szletesen megvizsg\u00e1ljuk, hogy mi rejlik a Quarkus reakt\u00edv magj\u00e1nak dualizmus\u00e1ban, \u00e9s hogy <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">bejelent\u00e9s<\/a><\/noindex>).<\/p>\n<p>-fejleszt\u0151k hogyan haszn\u00e1lhatj\u00e1k ki ezeket az el\u0151ny\u00f6ket. <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>A mikroszolg\u00e1ltat\u00e1sok<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">esem\u00e9ny-vez\u00e9relt architekt\u00far\u00e1k,<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">a serverless<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">-funkci\u00f3k \u2013 mindez ma, mondhatni, felfut\u00f3ban van. Az ut\u00f3bbi id\u0151ben a felh\u0151alap\u00fa architekt\u00far\u00e1k l\u00e9trehoz\u00e1sa sokkal egyszer\u0171bb\u00e9 \u00e9s el\u00e9rhet\u0151bb\u00e9 v\u00e1lt, azonban a probl\u00e9m\u00e1k megmaradtak \u2013 k\u00fcl\u00f6n\u00f6sen a Java-fejleszt\u0151k sz\u00e1m\u00e1ra. P\u00e9ld\u00e1ul a serverless-funkci\u00f3k \u00e9s mikroszolg\u00e1ltat\u00e1sok eset\u00e9ben s\u00fcrget\u0151 sz\u00fcks\u00e9g van a ind\u00edt\u00e1si id\u0151 cs\u00f6kkent\u00e9s\u00e9re, a mem\u00f3riahaszn\u00e1lat cs\u00f6kkent\u00e9s\u00e9re \u00e9s arra, hogy a fejleszt\u00e9s k\u00e9nyelmesebb\u00e9 \u00e9s \u00e9lvezetesebb\u00e9 v\u00e1ljon. Az ut\u00f3bbi \u00e9vekben a Java sz\u00e1mos fejleszt\u00e9st \u00e9rt el, p\u00e9ld\u00e1ul a kont\u00e9nerekhez optimaliz\u00e1lt ergonomikus funkci\u00f3kat stb. De a Java norm\u00e1lis m\u0171k\u00f6d\u00e9s\u00e9nek el\u00e9r\u00e9se kont\u00e9nerben tov\u00e1bbra sem egyszer\u0171. Ez\u00e9rt el\u0151sz\u00f6r megvizsg\u00e1ljuk a Java n\u00e9h\u00e1ny bels\u0151 bonyolults\u00e1g\u00e1t, amelyek k\u00fcl\u00f6n\u00f6sen \u00e9les hat\u00e1st gyakorolnak a kont\u00e9ner-alap\u00fa Java-alkalmaz\u00e1sok fejleszt\u00e9sekor.<\/a><\/noindex>-A funkci\u00f3k mind olyan ter\u00fcletek, amelyeket ma m\u00e1r fellend\u00fcl\u00e9s jellemez. Az ut\u00f3bbi id\u0151ben a felh\u0151alap\u00fa architekt\u00far\u00e1k l\u00e9trehoz\u00e1sa sokkal egyszer\u0171bb\u00e9 \u00e9s el\u00e9rhet\u0151bb\u00e9 v\u00e1lt, azonban a probl\u00e9m\u00e1k megmaradtak \u2013 k\u00fcl\u00f6n\u00f6sen a Java-fejleszt\u0151k sz\u00e1m\u00e1ra. P\u00e9ld\u00e1ul a serverless funkci\u00f3k \u00e9s mikroszolg\u00e1ltat\u00e1sok eset\u00e9ben s\u00fcrget\u0151 sz\u00fcks\u00e9g van a kezdeti ind\u00edt\u00e1si id\u0151 cs\u00f6kkent\u00e9s\u00e9re, a mem\u00f3riafogyaszt\u00e1s m\u00e9rs\u00e9kl\u00e9s\u00e9re, \u00e9s arra, hogy a fejleszt\u00e9si folyamat k\u00e9nyelmesebb \u00e9s \u00e9lvezetesebb legyen. Az ut\u00f3bbi \u00e9vekben a Java sz\u00e1mos fejleszt\u00e9st eszk\u00f6z\u00f6lt, p\u00e9ld\u00e1ul a kont\u00e9nerek sz\u00e1m\u00e1ra kifejlesztett ergonomikai funkci\u00f3kat \u00e9s egyebeket. Ennek ellen\u00e9re a Java megfelel\u0151 m\u0171k\u00f6dtet\u00e9se kont\u00e9nerben tov\u00e1bbra is neh\u00e9zs\u00e9gekbe \u00fctk\u00f6zik. Ez\u00e9rt el\u0151sz\u00f6r n\u00e9h\u00e1ny bels\u0151 neh\u00e9zs\u00e9get fogunk megvizsg\u00e1lni, amelyek k\u00fcl\u00f6n\u00f6sen \u00e9lesebben jelentkeznek a kont\u00e9neralap\u00fa Java-alkalmaz\u00e1sok fejleszt\u00e9se sor\u00e1n.<\/p>\n<p>El\u0151sz\u00f6r n\u00e9zz\u00fck meg a t\u00f6rt\u00e9netet.<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan egyes\u00edti a Quarkus az imperat\u00edv \u00e9s reakt\u00edv programoz\u00e1st\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Sz\u00e1lak \u00e9s kont\u00e9nerek<\/h3>\n<p>\nA 8u131-es verzi\u00f3t\u00f3l kezdve a Java nagyj\u00e1b\u00f3l elkezdte t\u00e1mogatni a kont\u00e9nereket a funkcion\u00e1lis ergon\u00f3mi\u00e1ban t\u00f6rt\u00e9nt fejleszt\u00e9sek r\u00e9v\u00e9n. K\u00fcl\u00f6n\u00f6sen, mostant\u00f3l a JVM tudja, h\u00e1ny processzormag fut \u00e9ppen, \u00e9s ennek megfelel\u0151en tudja optimaliz\u00e1lni a sz\u00e1lpools \u2013 \u00e1ltal\u00e1ban a fork\/join poolokat. Ez k\u00e9ts\u00e9gtelen\u00fcl nagyszer\u0171, de tegy\u00fck fel, hogy van egy hagyom\u00e1nyos webalkalmaz\u00e1sunk, amely HTTP-szervleteket haszn\u00e1l, \u00e9s Tomcat-ban, Jetty-ben \u00e9s hasonl\u00f3kban fut. Ennek eredm\u00e9nyek\u00e9nt ez az alkalmaz\u00e1s minden egyes k\u00e9r\u00e9shez k\u00fcl\u00f6n sz\u00e1lat biztos\u00edt, \u00e9s lehet\u0151v\u00e9 teszi, hogy ez a sz\u00e1l blokkolva legyen, am\u00edg I\/O m\u0171veletekre v\u00e1r, p\u00e9ld\u00e1ul adatb\u00e1zis, f\u00e1jlok vagy m\u00e1s szolg\u00e1ltat\u00e1sok el\u00e9r\u00e9sekor. Ez azt jelenti, hogy egy ilyen alkalmaz\u00e1s m\u00e9rete nem a rendelkez\u00e9sre \u00e1ll\u00f3 magok sz\u00e1m\u00e1t\u00f3l f\u00fcgg, hanem az egyidej\u0171 k\u00e9r\u00e9sek sz\u00e1m\u00e1t\u00f3l. Ezenk\u00edv\u00fcl ez azt jelenti, hogy a Kubernetes kv\u00f3t\u00e1k vagy korl\u00e1tok a magok sz\u00e1m\u00e1nak tekintet\u00e9ben nem sokat seg\u00edtenek, \u00e9s a v\u00e9g\u00e9n throttlinghoz vezet.<\/p>\n<h3>Mem\u00f3riakimer\u00fcl\u00e9s<\/h3>\n<p>\nA sz\u00e1lak a mem\u00f3ria. \u00c9s a bels\u0151 kont\u00e9ner mem\u00f3ria korl\u00e1toz\u00e1sok nem csodaszer. Csak kezdj el n\u00f6velni az alkalmaz\u00e1sok \u00e9s sz\u00e1lak sz\u00e1m\u00e1t, \u00e9s el\u0151bb-ut\u00f3bb kritikus n\u00f6veked\u00e9ssel tal\u00e1lkozol a v\u00e1lt\u00e1sok gyakoris\u00e1g\u00e1ban, ez pedig teljes\u00edtm\u00e9nyroml\u00e1shoz vezet. Ezenk\u00edv\u00fcl, ha az alkalmaz\u00e1s hagyom\u00e1nyos mikroszolg\u00e1ltat\u00e1s-keretrendszereket haszn\u00e1l, vagy adatb\u00e1zishoz csatlakozik, vagy cache-el\u00e9st alkalmaz, vagy valahogy tov\u00e1bbi mem\u00f3ri\u00e1t fogyaszt, akkor nyilv\u00e1nval\u00f3an sz\u00fcks\u00e9ged van egy eszk\u00f6zre, amely lehet\u0151v\u00e9 teszi, hogy belen\u00e9zz a JVM-be, \u00e9s megn\u00e9zd, hogyan kezeli azt a mem\u00f3ri\u00e1t, an\u00e9lk\u00fcl, hogy mag\u00e1t a JVM-et meg\u00f6leln\u00e9d (p\u00e9ld\u00e1ul XX:+UseCGroupMemoryLimitForHeap). \u00c9s annak ellen\u00e9re, hogy a Java 9-t\u0151l kezdve a JVM megtanult cgroups-ot kezelni \u00e9s ennek megfelel\u0151en alkalmazkodni, a mem\u00f3ria fenntart\u00e1sa \u00e9s kezel\u00e9se tov\u00e1bbra is meglehet\u0151sen bonyolult feladat.<\/p>\n<h3>Kv\u00f3t\u00e1k \u00e9s korl\u00e1tok<\/h3>\n<p>\nA Java 11-ben megjelent a CPU-kv\u00f3t\u00e1k t\u00e1mogat\u00e1sa (p\u00e9ld\u00e1ul PreferContainerQuotaForCPUCount). A Kubernetes szint\u00e9n t\u00e1mogatja a korl\u00e1tokat \u00e9s kv\u00f3t\u00e1kat. Igen, ennek van \u00e9rtelme, de ha az alkalmaz\u00e1s \u00fajra kiker\u00fcl a kijel\u00f6lt kv\u00f3t\u00e1kb\u00f3l, akkor ism\u00e9t azon a ponton vagyunk, hogy a m\u00e9ret \u2013 a hagyom\u00e1nyos Java-alkalmaz\u00e1sok eset\u00e9n \u2013 a magok sz\u00e1m\u00e1val, valamint minden k\u00e9r\u00e9shez k\u00fcl\u00f6n sz\u00e1l biztos\u00edt\u00e1s\u00e1val van meghat\u00e1rozva, \u00edgy ennek nem sok \u00e9rtelme van.<br \/>\nEzenk\u00edv\u00fcl, ha kv\u00f3t\u00e1kat \u00e9s limiteket vagy a Kubernetes alapj\u00e1t k\u00e9pez\u0151 platform horizont\u00e1lis (scale-out) sk\u00e1l\u00e1z\u00e1si funkci\u00f3it haszn\u00e1ljuk, a probl\u00e9ma nem old\u00f3dik meg mag\u00e1t\u00f3l. Csak t\u00f6bb er\u0151forr\u00e1st k\u00f6lt\u00fcnk el az alapvet\u0151 probl\u00e9ma megold\u00e1s\u00e1ra, vagy v\u00e9g\u00fcl t\u00falfogyaszt\u00e1sra jutunk. Ha ez egy nagy terhel\u00e9s\u0171 rendszer egy nyilv\u00e1nos felh\u0151ben, akkor szinte biztos, hogy t\u00f6bb er\u0151forr\u00e1st haszn\u00e1lunk, mint amennyire val\u00f3j\u00e1ban sz\u00fcks\u00e9g van.<\/p>\n<h3>\u00c9s mit lehet kezdeni mindezekkel?<\/h3>\n<p>\nHa egyszer\u0171en akarjuk, aszinkron \u00e9s nem blokkol\u00f3 bemeneti-kimeneti k\u00f6nyvt\u00e1rakat \u00e9s keretrendszereket kell haszn\u00e1lni, mint p\u00e9ld\u00e1ul a Netty, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/10\/21\/eclipse-vert-x-3-8-1-update-for-red-hat-runtimes\/\">Vert.x<\/a><\/noindex> vagy Akka. Ezek sokkal jobban alkalmasak a kont\u00e9nerekben val\u00f3 munk\u00e1ra reakt\u00edv term\u00e9szet\u00fck miatt. A nem blokkol\u00f3 bemeneti-kimeneti seg\u00edts\u00e9g\u00e9vel ugyanaz a sz\u00e1l t\u00f6bb p\u00e1rhuzamos k\u00e9r\u00e9s feldolgoz\u00e1s\u00e1ra is k\u00e9pes. Am\u00edg egy k\u00e9r\u00e9s a bemeneti-kimeneti eredm\u00e9nyekre v\u00e1r, a kezel\u0151 sz\u00e1l felold\u00f3dik \u00e9s \u00e1tv\u00e1lt egy m\u00e1sik k\u00e9r\u00e9sre. Amikor a bemeneti-kimeneti eredm\u00e9nyek v\u00e9gre meg\u00e9rkeznek, az els\u0151 k\u00e9r\u00e9s feldolgoz\u00e1sa folytat\u00f3dik. A k\u00e9r\u00e9sek feldolgoz\u00e1s\u00e1nak v\u00e1ltogat\u00e1s\u00e1val ugyanazon sz\u00e1l keretein bel\u00fcl cs\u00f6kkenteni lehet a sz\u00e1lak sz\u00e1m\u00e1t \u00e9s cs\u00f6kkenteni a k\u00e9r\u00e9sek feldolgoz\u00e1s\u00e1hoz sz\u00fcks\u00e9ges er\u0151forr\u00e1sokat.<\/p>\n<p>Nem blokkol\u00f3 bemeneti-kimeneti eset\u00e9n a magok sz\u00e1ma kulcsfontoss\u00e1g\u00fa param\u00e9terr\u00e9 v\u00e1lik, mivel ez hat\u00e1rozza meg a p\u00e1rhuzamosan v\u00e9grehajthat\u00f3 bemeneti-kimeneti sz\u00e1lak sz\u00e1m\u00e1t. Ha helyesen haszn\u00e1lj\u00e1k, ez lehet\u0151v\u00e9 teszi a terhek hat\u00e9kony eloszt\u00e1s\u00e1t a magok k\u00f6z\u00f6tt, \u00e9s nagyobb terhel\u00e9sek kezel\u00e9s\u00e9t kevesebb er\u0151forr\u00e1ssal.<\/p>\n<h3>Hogyan, \u00e9s ennyi?<\/h3>\n<p>\nNem, van m\u00e9g valami. A reakt\u00edv programoz\u00e1s seg\u00edt jobban kihaszn\u00e1lni az er\u0151forr\u00e1sokat, de ennek is van k\u00f6lts\u00e9ge. K\u00fcl\u00f6n\u00f6sen a k\u00f3dot a nem blokkol\u00e1s elvei szerint kell \u00e1t\u00edrni, \u00e9s ker\u00fclni kell a bemeneti-kimeneti sz\u00e1lak blokkol\u00e1s\u00e1t. Ez egy teljesen m\u00e1s fejleszt\u00e9si \u00e9s v\u00e9grehajt\u00e1si modell. B\u00e1r rengeteg hasznos k\u00f6nyvt\u00e1r \u00e1ll rendelkez\u00e9sre, ennek ellen\u00e9re ez radik\u00e1lis v\u00e1ltoz\u00e1st jelent a megszokott gondolkod\u00e1sm\u00f3dhoz k\u00e9pest.<\/p>\n<p>El\u0151sz\u00f6r is, meg kell tanulnod olyan k\u00f3dot \u00edrni, amely aszinkron m\u00f3don fut. Mihelyt elkezded haszn\u00e1lni a blokkol\u00e1s n\u00e9lk\u00fcli bemeneti-kimeneti funkci\u00f3t, egy\u00e9rtelm\u0171en meg kell hat\u00e1roznod, hogy mi t\u00f6rt\u00e9njen, amikor v\u00e1lasz \u00e9rkezik a k\u00e9r\u00e9sre. T\u00f6bb\u00e9 nem blokkolhatod \u00e9s v\u00e1rhatsz. Ehelyett haszn\u00e1lhatsz visszah\u00edv\u00e1sokat, reakt\u00edv programoz\u00e1st vagy folytonoss\u00e1got. De ez m\u00e9g nem minden: a blokkol\u00e1s n\u00e9lk\u00fcli bemeneti-kimenet haszn\u00e1lat\u00e1hoz blokkol\u00e1s n\u00e9lk\u00fcli kiszolg\u00e1l\u00f3kra \u00e9s kliensekre van sz\u00fcks\u00e9ged, \u00e9s lehet\u0151leg minden\u00fctt. HTTP eset\u00e9n egyszer\u0171 a helyzet, de vannak adatb\u00e1zisok, f\u00e1jlrendszerek \u00e9s m\u00e9g sok egy\u00e9b is.<\/p>\n<p>B\u00e1r a tot\u00e1lis \u00e1tj\u00e1rhat\u00f3 reaktivit\u00e1s maxim\u00e1lis hat\u00e9konys\u00e1got biztos\u00edt, az ilyen v\u00e1lt\u00e1sokat neh\u00e9z lehet gyakorlatba \u00fcltetni. Ez\u00e9rt sz\u00fcks\u00e9gess\u00e9 v\u00e1lik a reakt\u00edv \u00e9s imperat\u00edv k\u00f3d \u00f6tv\u00f6z\u00e9se.<\/p>\n<ol>\n<li>Hat\u00e9konyan haszn\u00e1lni az er\u0151forr\u00e1sokat a szoftverrendszer legnagyobb terhelts\u00e9g\u0171 ter\u00fcletein;<\/li>\n<li>Egyszer\u0171bb st\u00edlus\u00fa k\u00f3dot alkalmazni a rendszer t\u00f6bbi r\u00e9sz\u00e9n.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Bemutatjuk a Quarkus-t<\/h3>\n<p>\nMag\u00e1ban a Quarkus l\u00e9nyeg\u00e9ben az imperat\u00edv \u00e9s reakt\u00edv modellek egyes\u00edt\u00e9se egyetlen fut\u00e1si k\u00f6rnyezet keretein bel\u00fcl.<\/p>\n<p>A Quarkus alapj\u00e1t a Vert.x \u00e9s a Netty k\u00e9pezi, amelyen egy sor reakt\u00edv keretrendszer \u00e9s kieg\u00e9sz\u00edt\u0151 m\u0171k\u00f6dik, amelyek seg\u00edtik a fejleszt\u0151ket. A Quarkus nemcsak HTTP-mikroszolg\u00e1ltat\u00e1sok, hanem esem\u00e9nyvez\u00e9relt architekt\u00far\u00e1k \u00e9p\u00edt\u00e9s\u00e9re is szolg\u00e1l. Reakt\u00edv term\u00e9szet\u00e9nek k\u00f6sz\u00f6nhet\u0151en rendk\u00edv\u00fcl hat\u00e9konyan m\u0171k\u00f6dik \u00fczenetv\u00e1lt\u00f3 rendszerekkel (Apache Kafka, AMQP stb.).<\/p>\n<p>A tr\u00fckk az, hogyan lehet ugyanazt a reakt\u00edv motort haszn\u00e1lni ak\u00e1r imperat\u00edv, ak\u00e1r reakt\u00edv k\u00f3dhoz.<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan egyes\u00edti a Quarkus az imperat\u00edv \u00e9s reakt\u00edv programoz\u00e1st\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A Quarkus kiv\u00e1l\u00f3an kezeli ezt. A v\u00e1laszt\u00e1s az imperat\u00edv \u00e9s reakt\u00edv megk\u00f6zel\u00edt\u00e9s k\u00f6z\u00f6tt egy\u00e9rtelm\u0171 \u2013 mindkett\u0151h\u00f6z a reakt\u00edv magot haszn\u00e1ljuk. Nagyon seg\u00edt a gyors, nem blokkol\u00f3 k\u00f3d, amely szinte mindent kezel, ami az esem\u00e9nyk\u00f6r (event-loop thread, m\u00e1s n\u00e9ven IO thread) \u00e1tfolyik. De ha klasszikus REST alkalmaz\u00e1sokkal vagy kliensoldali alkalmaz\u00e1sokkal dolgozik, a Quarkus rendelkezik egy imperat\u00edv programoz\u00e1si modellel. P\u00e9ld\u00e1ul a Quarkus HTTP-t\u00e1mogat\u00e1sa a nem blokkol\u00f3 \u00e9s reakt\u00edv motor (Eclipse Vert.x \u00e9s Netty) haszn\u00e1lat\u00e1n alapul. Minden HTTP-k\u00e9r\u00e9s, amelyet az alkalmaz\u00e1sa kap, el\u0151sz\u00f6r az esem\u00e9nyk\u00f6r\u00f6n (IO Thread) halad \u00e1t, majd a k\u00e9rd\u00e9sek kezel\u00e9s\u00e9\u00e9rt felel\u0151s k\u00f3dhoz ker\u00fcl. A k\u00e9r\u00e9skezel\u0151 k\u00f3d a c\u00e9lpontt\u00f3l f\u00fcgg\u0151en k\u00fcl\u00f6n sz\u00e1l keretein bel\u00fcl h\u00edvhat\u00f3 meg (\u00fan. worker thread, amely servlet \u00e9s Jax-RS eset\u00e9n alkalmazott), vagy az alapvet\u0151 bemeneti\/kimeneti sz\u00e1lat haszn\u00e1lja (reakt\u00edv \u00fatvonal, reactive route).<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan egyes\u00edti a Quarkus az imperat\u00edv \u00e9s reakt\u00edv programoz\u00e1st\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A k\u00e9relmezett \u00fczenet\u00e1tviteli rendszerekhez nem blokkol\u00f3 klienseket haszn\u00e1lunk, amelyek a Vert.x motor felett m\u0171k\u00f6dnek. \u00cdgy hat\u00e9konyan k\u00fcldheti, fogadhatja \u00e9s feldolgozhatja az \u00fczeneteket a messaging middleware rendszerekb\u0151l.<\/p>\n<p>A weboldalon <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> \u00d6sszegy\u0171jt\u00f6tt\u00fcnk n\u00e9h\u00e1ny j\u00f3 \u00fatmutat\u00f3t, amelyek seg\u00edtenek a Quarkus haszn\u00e1lat\u00e1nak megkezd\u00e9s\u00e9ben:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Haszn\u00e1ljuk a Reakt\u00edv \u00datvonalt<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Reakt\u00edv SQL Kliensek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Apache Kafka haszn\u00e1lata reakt\u00edv \u00fczenetk\u00fcld\u00e9ssel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">AMQP haszn\u00e1lata reakt\u00edv \u00fczenetk\u00fcld\u00e9ssel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Vert.x API haszn\u00e1lata<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nEzenk\u00edv\u00fcl online gyakorlati anyagokat is k\u00e9sz\u00edtett\u00fcnk, amelyek seg\u00edtenek megismerkedni a reakt\u00edv programoz\u00e1s k\u00fcl\u00f6nf\u00e9le aspektusaival. A tanul\u00e1sukhoz csup\u00e1n egy b\u00f6ng\u00e9sz\u0151 sz\u00fcks\u00e9ges, nem sz\u00fcks\u00e9ges IDE, \u00e9s egy sz\u00e1m\u00edt\u00f3g\u00e9p sem k\u00f6telez\u0151. Ezeket az anyagokat itt tal\u00e1lhatja: <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">itt<\/a><\/noindex>.<\/p>\n<h3>Hasznos forr\u00e1sok<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.redhat.com\/cms\/managed-files\/cl-4-reasons-try-quarkus-checklist-f19180cs-201909-en.pdf\">4 ok, hogy kipr\u00f3b\u00e1lja a Quarkust<\/a><\/noindex><\/li>\n<li>A Quarkus projekt webhelye \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>A Quarkus projekt a GitHubon \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>A Quarkus projekt Twittere \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>A Quarkus projekt chatje \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>A Quarkus projekt f\u00f3ruma \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/groups.google.com\/forum\/#\">groups.google.com\/forum\/#<\/a><\/noindex>!forum\/quarkus-dev<\/li>\n<\/ul>\n<h3>10 videoanyag a Quarkusr\u00f3l a t\u00e9ma meg\u00e9rt\u00e9s\u00e9hez<\/h3>\n<p>\nAhogy a weboldalon \u00edrj\u00e1k <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">Quarkus.io<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/05\/09\/create-your-first-quarkus-project-with-eclipse-ide-red-hat-codeready-studio\/\">Quarkus<\/a><\/noindex> \u2013 ez egy <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-orient\u00e1lt Java-keretrendszer, amely a GraalVM \u00e9s az OpenJDK HotSpot k\u00f6r\u00e9 \u00e9p\u00fclt, \u00e9s a legjobb Java k\u00f6nyvt\u00e1rakb\u00f3l \u00e9s szabv\u00e1nyokb\u00f3l \u00e1ll.<\/p>\n<p>A t\u00e9ma meg\u00e9rt\u00e9s\u00e9hez \u00f6sszegy\u0171jt\u00f6tt\u00fcnk 10 videoanyagot, amelyek k\u00fcl\u00f6nb\u00f6z\u0151 aspektusait \u00e9s p\u00e9ld\u00e1it mutatj\u00e1k be a Quarkusnak:<\/p>\n<h4>1. Bemutatjuk a Quarkust: k\u00f6vetkez\u0151 gener\u00e1ci\u00f3s Java keretrendszer Kuberneteshez<\/h4>\n<p>\nSzerz\u0151k: Thomas Qvarnstrom \u00e9s Jason Greene<br \/>\nA Quarkus projekt c\u00e9lja egy Java platform l\u00e9trehoz\u00e1sa Kubernetes \u00e9s serverless k\u00f6rnyezetek sz\u00e1m\u00e1ra, valamint a reakt\u00edv \u00e9s imperat\u00edv programoz\u00e1si modellek integr\u00e1l\u00e1sa egy egys\u00e9ges futtat\u00e1si k\u00f6rnyezetbe, lehet\u0151v\u00e9 t\u00e9ve a fejleszt\u0151k sz\u00e1m\u00e1ra a rugalmass\u00e1got a k\u00fcl\u00f6nb\u00f6z\u0151 elosztott alkalmaz\u00e1sarchitekt\u00far\u00e1kkal val\u00f3 munk\u00e1ban. Tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt n\u00e9zze meg az al\u00e1bbi bevezet\u0151 el\u0151ad\u00e1st.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"ZCsWi_641Rk\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/ZCsWi_641Rk\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>2. Quarkus: szupergyors szubatomikus Java<\/h4>\n<p>\nSzerz\u0151: Burr Sutter<br \/>\nA DevNation Live internetes el\u0151ad\u00e1sa bemutatja, hogyan lehet a Quarkus-t haszn\u00e1lni v\u00e1llalati Java alkalmaz\u00e1sok, API-k, mikroszolg\u00e1ltat\u00e1sok \u00e9s serverless funkci\u00f3k optimaliz\u00e1l\u00e1s\u00e1ra Kubernetes\/OpenShift k\u00f6rnyezetben, \u00edgy sokkal kisebbek, gyorsabbak \u00e9s sk\u00e1l\u00e1zhat\u00f3bbak lesznek.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"7G_r1iyrn2c\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/7G_r1iyrn2c\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>3. Quarkus \u00e9s GraalVM: gyors\u00edtsuk fel a Hibernate-et szupersebess\u00e9gekre \u00e9s cs\u00f6kkents\u00fck szubatomikus m\u00e9ret\u0171re<\/h4>\n<p>\nSzerz\u0151: Sanne Grinovero<br \/>\nAz el\u0151ad\u00e1sb\u00f3l megtudhatja, hogy j\u00f6tt l\u00e9tre a Quarkus, hogyan m\u0171k\u00f6dik, \u00e9s hogyan teszi lehet\u0151v\u00e9 a komplex k\u00f6nyvt\u00e1rak, mint p\u00e9ld\u00e1ul a Hibernate ORM, kompatibilit\u00e1s\u00e1t a GraalVM nat\u00edv k\u00e9peivel.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"za5CSBX-UME\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/za5CSBX-UME\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>4. Tanuljunk serverless alkalmaz\u00e1sokat fejleszteni<\/h4>\n<p>\nSzerz\u0151: Marthen Luther<br \/>\nA lenti vide\u00f3ban bemutatjuk, hogyan lehet egyszer\u0171 Java alkalmaz\u00e1st l\u00e9trehozni Quarkus seg\u00edts\u00e9g\u00e9vel, \u00e9s telep\u00edteni mint serverless alkalmaz\u00e1st Knative-ra.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-c1Sh-1uAeM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-c1Sh-1uAeM\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>5. Quarkus: k\u00f3doljon \u00f6r\u00f6mmel<\/h4>\n<p>\nSzerz\u0151: Edson Yanaga<br \/>\nA Quarkus els\u0151 projektj\u00e9nek l\u00e9trehoz\u00e1s\u00e1r\u00f3l sz\u00f3l\u00f3 vide\u00f3 \u00fatmutat\u00f3t ad, hogy meg\u00e9rts\u00fck, mi\u00e9rt szeretik a fejleszt\u0151k a Quarkust.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"8r3ZV36ah4I\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/8r3ZV36ah4I\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>6. Java \u00e9s kont\u00e9nerek \u2013 milyen j\u00f6v\u0151 v\u00e1r r\u00e1juk egy\u00fctt<\/h4>\n<p>\nSzerz\u0151: Mark Little<br \/>\nEz az el\u0151ad\u00e1s bemutatja a Java t\u00f6rt\u00e9nelm\u00e9t, \u00e9s megmagyar\u00e1zza, mi\u00e9rt a Quarkus a Java j\u00f6v\u0151je.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"O085h6jKBWc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/O085h6jKBWc\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>7. Quarkus: szupergyors szubatomikus Java<\/h4>\n<p>\nSzerz\u0151: Dimitris Andreadis<br \/>\nA Quarkus \u00e1ltal elismert el\u0151ny\u00f6k \u00e1ttekint\u00e9se: egyszer\u0171s\u00e9g, szuper magas sebess\u00e9gek, a legjobb k\u00f6nyvt\u00e1rak \u00e9s szabv\u00e1nyok.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"UWETnSFB0WA\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/UWETnSFB0WA\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>8. Quarkus \u00e9s szubatomikus reakt\u00edv rendszerek<\/h4>\n<p>\nSzerz\u0151: Clement Escoffier<br \/>\nA GraalVM integr\u00e1ci\u00f3nak k\u00f6sz\u00f6nhet\u0151en a Quarkus szupergyors fejleszt\u00e9si \u00e9lm\u00e9nyt \u00e9s szubatomikus futtat\u00e1si k\u00f6rnyezetet biztos\u00edt. A szerz\u0151 besz\u00e9l a Quarkus reakt\u00edv oldal\u00e1r\u00f3l \u00e9s arr\u00f3l, hogyan haszn\u00e1lhat\u00f3 reakt\u00edv \u00e9s adatfolyamos alkalmaz\u00e1sok l\u00e9trehoz\u00e1sakor.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"trwJxZawglc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/trwJxZawglc\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>9. Quarkus \u00e9s gyors alkalmaz\u00e1sfejleszt\u00e9s az Eclipse MicroProfile seg\u00edts\u00e9g\u00e9vel<\/h4>\n<p>\nSzerz\u0151: John Clingan<br \/>\nAz Eclipse MicroProfile \u00e9s a Quarkus kombin\u00e1l\u00e1s\u00e1val a fejleszt\u0151k teljes funkci\u00f3j\u00fa MicroProfile kont\u00e9neralkalmaz\u00e1sokat hozhatnak l\u00e9tre, amelyek n\u00e9h\u00e1ny tizedm\u00e1sodperc alatt indulnak el. A vide\u00f3 r\u00e9szletesen bemutatja, hogyan lehet MicroProfile kont\u00e9neralkalmaz\u00e1st k\u00f3dolni a Kubernetes platformra t\u00f6rt\u00e9n\u0151 telep\u00edt\u00e9shez.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"hReKM6rmcho\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/hReKM6rmcho\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>10. Java, \"Turbo\" verzi\u00f3<\/h4>\n<p>\nSzerz\u0151: Markus Biel (Marcus Biel)<br \/>\nA szerz\u0151 megmutatja, hogyan haszn\u00e1ljuk a Quarkust superkicsi \u00e9s szupergyors Java kont\u00e9nerek l\u00e9trehoz\u00e1s\u00e1ra, amelyek val\u00f3di \u00e1tt\u00f6r\u00e9st jelenthetnek, k\u00fcl\u00f6n\u00f6sen serverless k\u00f6rnyezetekben.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"eqUApOrYeS8\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/eqUApOrYeS8\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/493010\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438 Kubernetes. \u041b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u0442\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Quarkus, \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u00ab\u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u043e\u0439 Java\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Quarkus \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432 Enterprise. Java \u0438 JVM \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74796,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74795","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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438\" \/>\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\/hu\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\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-03-20T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-20T17:42:21+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\udd47Hogyan egyes\u00edti a Quarkus az imperat\u00edv \u00e9s a reakt\u00edv programoz\u00e1st | ProHoster","description":"Id\u00e9n komolyan szeretn\u00e9nk fejleszteni a kont\u00e9nerekkel, a Cloud-Native Java-val \u00e9s","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","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-03-20T17:42:21+00:00","article:modified_time":"2020-03-20T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74795","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 18:07:28","updated":"2022-10-01 02:07:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}