{"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\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sel aastal plaanime t\u00f5siselt arendada konteinerite teemasid, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Cloud-Native Java<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Loomulik j\u00e4tk neile on r\u00e4\u00e4kida raamistikust Quarkus, mis on juba <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">tutvustatud<\/a><\/noindex> Habr's. T\u00e4nane artikkel ei k\u00e4sitle niiv\u00f5rd \"alateemalist superkiiret Java\" \u00fclesehitust, vaid pigem v\u00f5imalusi, mida Quarkus toob ettev\u00f5tte arendusse.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava ja JVM on endiselt \u00fclimalt populaarsed, kuid serverita tehnoloogiate ja pilvep\u00f5histe mikroteenuste kasutamisel rakendatakse Java-d ja teisi JVM-i keeli j\u00e4rjest harvemini, kuna need v\u00f5tavad liiga palju m\u00e4lu ja laadivad liiga aeglaselt, mist\u00f5ttu ei sobi need h\u00e4sti l\u00fchiealiste konteineritega t\u00f6\u00f6tamiseks. \u00d5nneks on see olukord praegu muutumas Quarkuse t\u00e4nu.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Superkiire alateemaline Java on j\u00f5udnud uuele tasemele!<\/h3>\n<p>\n42 v\u00e4ljalaskmist, 8 kuu t\u00f6\u00f6 kogukonnalt ja 177 h\u00e4mmastavat arendajat \u2013 selle k\u00f5ik on tulemuseks novembris 2019 v\u00e4ljaanne <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, v\u00e4ljalase, mis t\u00e4histab olulist verstaposti projekti arengus ja pakub hulgaliselt suurep\u00e4raseid funktsioone ja v\u00f5imalusi (rohkem neist saab lugeda <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">avatud<\/a><\/noindex>).<\/p>\n<p>T\u00e4na r\u00e4\u00e4gime, kuidas Quarkus \u00fchendab imperatiivsete ja reageerivate programmeerimismudelite alusel \u00fchtset reaktiivset tuuma. Alustame l\u00fchikese ajaloo \u00fclevaatega ja seej\u00e4rel vaatame \u00fcksikasjalikult, mis seisneb Quarkuse reaktiivse tuuma dualismis ja kuidas <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>-arendajad saavad neid eeliseid kasutada.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Mikroteenused<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">\u00fcritustel p\u00f5hinevad arhitektuurid<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">serverless<\/a><\/noindex>-funktsioonid \u2013 k\u00f5ik see on t\u00e4nap\u00e4eval, nagu \u00f6eldakse, t\u00f5usuteel. Hiljuti on pilvep\u00f5histe arhitektuuride loomine muutunud oluliselt lihtsamaks ja k\u00e4ttesaadavamaks, kuid probleemid on j\u00e4\u00e4nud \u2013 eriti Java-arendajatele. N\u00e4iteks serverless-funktsioonide ja mikroteenuste puhul on \u00e4\u00e4rmiselt vajalik k\u00e4ivitusaega l\u00fchendada, m\u00e4lu tarbimist v\u00e4hendada ja muuta nende arendamine mugavamaks ja meeldivamaks. Java on viimastel aastatel teinud mitmeid t\u00e4iustusi, nagu konteineritele m\u00f5eldud funktsionaalsuse t\u00e4iustamine ning muud. Siiski on Java t\u00f5rgete v\u00e4ltimine konteineris endiselt keeruline. Seet\u00f5ttu alustame sellest, et vaatame m\u00f5ningaid Java sisemisi keerukusi, mis eriti teravalt esinevad konteinerip\u00f5histe Java-rakenduste arendamisel.<\/p>\n<p>Alustuseks vaatame ajalugu.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>S\u00fcsteemid ja konteinerid<\/h3>\n<p>\nAlates versioonist 8u131 on Java rohkem-v\u00e4hem hakanud konteinerite jaoks toimetama, t\u00e4nu ergonomika funktsionaalsuse t\u00e4iustamisele. Eriti teab JVM n\u00fc\u00fcd, mitu protsessorituuma see t\u00f6\u00f6tab, ja suudab vastavalt konfigureerida t\u00f6\u00f6voogude gruppe \u2013 tavaliselt fork\/join gruppe. See on loomulikult suurep\u00e4rane, kuid oletame, et meil on traditsiooniline veebirakendus, mis kasutab HTTP-serve ja t\u00f6\u00f6tab Tomcatis, Jetty\u2019s jne. Tulemuseks on see, et rakendus jagab iga p\u00e4ringu jaoks eraldi t\u00f6\u00f6voo ja v\u00f5imaldab sellel voolul blokeerida, oodates sisendi-v\u00e4ljundi operatsioone, n\u00e4iteks k\u00f5nes andmebaasiga, failidega v\u00f5i muude teenustega. See t\u00e4hendab, et sellise rakenduse suurus ei s\u00f5ltu saadaval olevate tuumade arvust, vaid samal ajal tehtavate p\u00e4ringute arvust. Lisaks t\u00e4hendab see, et Kubernetes'i tuumade arvu kvoodid v\u00f5i piirangud ei aita siinkohal palju ning l\u00f5ppkokkuv\u00f5ttes viib see troppimise juurde.<\/p>\n<h3>M\u00e4lu ammendumine<\/h3>\n<p>\nVoolud on m\u00e4lu. Ja konteinerite piirm\u00e4\u00e4rad ei ole sugugi k\u00f5ikv\u00f5imsad. Alustage lihtsalt rakenduste ja voogude arvu suurendamist, ja varem v\u00f5i hiljem seotud olete silmitsi kriitilise konksude vahetuse kasvu ja seega sooritusv\u00f5ime halvenemisega. Lisaks, kui rakendus kasutab traditsioonilisi mikroteenuste raamistikke v\u00f5i on \u00fchendatud andmebaasidega, v\u00f5i rakendab vahem\u00e4lu, v\u00f5i kuidagi muul viisil kasutab m\u00e4lu, vajate kindlasti t\u00f6\u00f6riista, mis v\u00f5imaldab vaadata JVM-i sisse ja n\u00e4ha, kuidas see m\u00e4lu haldab, samas mitte h\u00e4vitades JVM-i ennast (n\u00e4iteks XX:+UseCGroupMemoryLimitForHeap). Ja isegi hoolimata sellest, et alates Java 9-st on JVM \u00f5ppinud cgroups'e tajuma ja vastavalt kohanduma, j\u00e4\u00e4b m\u00e4lu eraldamine ja haldamine \u00fcsna keeruliseks asjaks.<\/p>\n<h3>Kvoodid ja piirangud<\/h3>\n<p>\nJava 11 on saanud toetuse CPU-kvootidele (n\u00e4iteks PreferContainerQuotaForCPUCount). Kubernetes pakub samuti tugi piirangutele ja kvootidele. Jah, see k\u00f5ik on m\u00f5ttekas, kuid kui rakendus taas \u00fcletab m\u00e4\u00e4ratud kvoodi, p\u00f6\u00f6rdume tagasi koodi, et suurus \u2014 nagu traditsiooniliste Java-rakenduste puhul \u2014 m\u00e4\u00e4ratakse tuumade arvu ja eraldatud niidi m\u00e4\u00e4ramise p\u00f5hjal iga p\u00e4ringu jaoks, seega on sellest k\u00f5igest v\u00e4he kasu.<br \/>\nLisaks, kui kasutada kvoote ja piiranguid v\u00f5i Kubernetesel p\u00f5hineva platvormi horisontaalse (scale-out) skaleerimise funktsioone, ei lahenda probleem iseennast. Me lihtsalt kulutame rohkem ressursse algse probleemi lahendamiseks v\u00f5i satume l\u00f5puks ressursside \u00fclekasutamisse. Ja kui see on k\u00f5rge koormusega s\u00fcsteem avalikus pilves, hakkame peaaegu kindlasti kasutama rohkem ressursse, kui tegelikult vajalik.<\/p>\n<h3>Kuidas sellega k\u00f5igega toime tulla?<\/h3>\n<p>\nLihtsalt \u00f6eldes, tuleks kasutada as\u00fcnkroonseid ja mitteblokeerivaid I\/O teeke ja raamistikku nagu 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> v\u00f5i Akka. Need sobivad konteinerites t\u00f6\u00f6tamiseks palju paremini t\u00e4nu oma reaktiivsele iseloomule. T\u00e4nu mitteblokeerivale sisend-v\u00e4ljundile v\u00f5ib sama niit samal ajal k\u00e4sitleda mitmeid samaaegseid p\u00e4ringuid. Samal ajal kui \u00fcks p\u00e4ring ootab sisend-v\u00e4ljundi tulemusi, vabastatakse see niit, et tegeleda teise p\u00e4ringuga. Kui sisend-v\u00e4ljundi tulemused l\u00f5puks saabuvad, j\u00e4tkatakse esimese p\u00e4ringu t\u00f6\u00f6tlemist. \u00dche ja sama niidi raames p\u00e4ringute vahelduv t\u00f6\u00f6tlemine v\u00f5imaldab v\u00e4hendada niitide koguarvu ja v\u00e4hendada ressursikasutust p\u00e4ringute t\u00f6\u00f6tlemisel.<\/p>\n<p>Mitteblokeeriva sisend-v\u00e4ljundi korral on tuumade arv kriitiline parameeter, kuna just see m\u00e4\u00e4rab, kui palju sisend-v\u00e4ljundi niite saab samaaegselt k\u00e4itada. \u00d5ige kasutuse korral v\u00f5imaldab see t\u00f5husalt jaotada koormust tuumade vahel ning toime tulla suuremate koormustega v\u00e4iksema ressursikasutusega.<\/p>\n<h3>Kuidas, ja see k\u00f5ik?<\/h3>\n<p>\nEi, siin on veel midagi. Reaktiivne programmeerimine aitab paremini kasutada ressursse, kuid see toob ka oma hinda. Eelk\u00f5ige tuleb kood \u00fcmber kirjutada vastavalt blokeerimise v\u00e4ltimise p\u00f5him\u00f5tetele ja v\u00e4ltida sisendi-v\u00e4ljundi voogude blokkeerimist. See on hoopis teine arenduse ja t\u00e4itmise mudel. Ja kuigi siin on palju kasulikke raamatukogusid, on see ikkagi radikaalne muutus harjumusp\u00e4rases m\u00f5tteviisis.<\/p>\n<p>Esiteks peate \u00f5ppima kirjutama koodi, mis t\u00e4idetakse as\u00fcnkroonselt. Nagu ainult te hakkate kasutama mitteblokeerivat sisendi-v\u00e4ljundit, peate selgelt m\u00e4\u00e4rama, mis juhtub, kui vastus saabub. Lihtsalt blokeerida ja oodata enam ei \u00f5nnestu. Selle asemel saate edastada tagasikutsumisi, kasutada reaktiivset programmeerimist v\u00f5i j\u00e4tkufunktsioone. Kuid see ei ole veel k\u00f5ik: mitteblokeeriva sisendi-v\u00e4ljundi kasutamiseks vajate mitteblokeerivaid servereid ja kliente, ja soovitavalt igal pool. HTTP puhul on k\u00f5ik lihtne, kuid on veel andmebaasid, failis\u00fcsteemid ja palju muud.<\/p>\n<p>Kuigi totaalne reaktiivne l\u00e4henemine pakub maksimumt\u00f5husust, on sellise \u00fclemineku praktikas rakendamine sageli keeruline. Seet\u00f5ttu on vajalik \u00fchendama reaktiivne ja imperatiivne kood, et:<\/p>\n<ol>\n<li>T\u00f5husalt kasutada ressursse k\u00f5ige koormatumates tarkvaras\u00fcsteemi suundades;<\/li>\n<li>Kasutada lihtsamat stiili koodi \u00fclej\u00e4\u00e4nud osades.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Tutvustame Quarkust<\/h3>\n<p>\nSelles peitubki Quarkuse olemus \u2013 \u00fchendada reaktiivne ja imperatiivne mudel \u00fche t\u00e4ideviimise keskkonna raames.<\/p>\n<p>Quarkuse aluseks on Vert.x ja Netty, millele rajatakse hulk reaktiivseid raamistikke ja laiendusi, et aidata arendajat. Quarkus on m\u00f5eldud mitte ainult HTTP-mikroteenuste, vaid ka s\u00fcndmustega juhitud arhitektuuride ehitamiseks. T\u00e4nu oma reaktiivsele loomusele t\u00f6\u00f6tab see v\u00e4ga t\u00f5husalt s\u00f5numite saatmise s\u00fcsteemidega (Apache Kafka, AMQP jne).<\/p>\n<p>K\u00f5ik ongi selles, kuidas kasutada sama reaktiivset mootort nii imperatiivse kui ka reaktiivse koodi jaoks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus teeb sellega suurep\u00e4rase t\u00f6\u00f6. Valik imperatiivse ja reaktiivse vahel on ilmne \u2013 kasutada reaktiivset tuuma nii \u00fche kui teise jaoks. See aitab eriti kiiresti ja mitteblokeerivat koodi luua, mis k\u00e4itleb peaaegu k\u00f5ike, mis l\u00e4bib s\u00fcndmuste ts\u00fckli (event-loop thread, tuntud ka kui IO thread). Kuid kui teil on klassikalised REST-rakendused v\u00f5i kliendi poolel t\u00f6\u00f6tavad rakendused, on Quarkusel olemas imperatiivne programmeerimismudel. N\u00e4iteks HTTP toetus Quarkuses p\u00f5hineb mitteblokeeriva ja reaktiivse mootori (Eclipse Vert.x ja Netty) kasutamisel. K\u00f5ik HTTP-p\u00e4ringud, mis teie rakendusse j\u00f5uavad, l\u00e4bivad esmalt s\u00fcndmuste ts\u00fckli (IO Thread) ja edastatakse seej\u00e4rel koodiosasse, mis haldab p\u00e4ringuid. S\u00f5ltuvalt sihtkohast v\u00f5ib p\u00e4ringute haldamise kood k\u00e4ivituda eraldi l\u00f5imes (nn worker thread, rakendatakse servletide ja Jax-RS puhul) v\u00f5i kasutada originaal sisse-\/v\u00e4ljalaske voogu (reaktiivne marsruut reactive route).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>S\u00fcndmustes\u00fcsteemide \u00fchendamiseks kasutatakse mittes\u00fcnkroneeritud kliente, mis t\u00f6\u00f6tavad Vert.x mootori peal. Seet\u00f5ttu saate t\u00f5husalt saata, vastu v\u00f5tta ja t\u00f6\u00f6delda s\u00f5numeid s\u00f5numivahetuse vahekihiga seotud s\u00fcsteemidest.<\/p>\n<p>Lehelt <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> oleme kogunud mitmeid h\u00e4id juhendeid, et aidata teil Quarkustega alustada:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Kasutades reaktiivseid marsruute<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Reaktiivsed SQL kliendid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Kasutades Apache Kafka't reaktiivses s\u00f5numivahetuses<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">Kasutades AMQP-d reaktiivses s\u00f5numivahetuses<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Kasutades Vertx API-d<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nLisaks oleme ette valmistanud veebip\u00f5hised praktilised \u00f5pikursused, et tutvustada erinevaid reaktiivse programmeerimise aspekte. Nende l\u00e4bimiseks piisab vaid brauserist, ei ole vajalik IDE-d ning arvuti pole ka h\u00e4davajalik. Need \u00f5pikursused on saadaval <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">siit<\/a><\/noindex>.<\/p>\n<h3>Kasulikud ressursid<\/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 p\u00f5hjust Quarkuse proovimiseks<\/a><\/noindex><\/li>\n<li>Quarkuse projekti veebisait \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Quarkuse projekt GitHubis \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Quarkuse projekti Twitteri konto \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Quarkuse projekti vestlus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Quarkuse projekti foorumid \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 videotundi Quarkuse kohta, et teemaga tutvuda<\/h3>\n<p>\nNagu veebisaidil \u00f6eldakse <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> on <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-orienteeritud Java-tehnoloogiate kogum, mis on optimeeritud GraalVM ja OpenJDK HotSpot jaoks ja koosneb parimatest Java teekidest ja standarditest.<\/p>\n<p>Kuna aidata teil Quarkuse teemat m\u00f5ista, oleme valinud 10 video\u00f5petust, kus k\u00e4sitletakse erinevaid aspekte ja n\u00e4iteid Quarkuse kasutamisest:<\/p>\n<h4>1. Tutvustame Quarkust: uus p\u00f5lvkond Java raamistik Kubernetes'ele<\/h4>\n<p>\nAutorid: Thomas Qvarnstrom ja Jason Greene<br \/>\nQuarkuse projekti eesm\u00e4rk on luua Java platvorm Kubernetes'ele ja serverless keskkondadele ning kombineerida reaktiivne ja imperatiivne programmeerimismudel \u00fches k\u00e4ituskeskkonnas, et arendajad saaksid paindlikult l\u00e4heneda laiale valikule jaotatud rakenduste arhitektuuridest. Rohkem teavet leiate all olevast sissejuhatusloengust.<\/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=\"Vaata videot\" 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: \u00fclikiire subaatomi Java<\/h4>\n<p>\nAutor: Burr Sutter<br \/>\nVideo\u00f5petus interneti loengust DevNation Live demonstreerib, kuidas kasutada Quarkust ettev\u00f5tte Java rakenduste, API-de, mikroteenuste ja serverless funktsioonide optimeerimiseks Kubernetes\/OpenShift keskkonnas, muutes need palju v\u00e4iksemaks, kiiremaks ja paremini skaleeritavaks.<\/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=\"Vaata videot\" 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 ja GraalVM: kiirendame Hibernate'i \u00fclikiiruseni ja tihendame subaatomi suurustesse<\/h4>\n<p>\nAutor: Sanne Grinovero<br \/>\nEsitluses saate teada, kuidas Quarkus s\u00fcndis, kuidas see t\u00f6\u00f6tab ja kuidas v\u00f5imaldab keerulisi teeke, nagu Hibernate ORM, GraalVM-i native-piltidega \u00fchilduvaks muuta.<\/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=\"Vaata videot\" 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. \u00d5pime arendama serveriteta rakendusi<\/h4>\n<p>\nAutor: Marthen Luther<br \/>\nAllolevas videos n\u00e4idatakse, kuidas luua lihtne Java rakendus Quarkuse abil ja k\u00e4ivitada see serveriteta rakendusena Knative'is.<\/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=\"Vaata videot\" 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: programmeerige naudinguga<\/h4>\n<p>\nAutor: Edson Yanaga<br \/>\nVideojuhend teie esimese Quarkuse projekti loomiseks, mis aitab m\u00f5ista, miks Quarkus v\u00f5idab arendajate s\u00fcdameid.<\/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=\"Vaata videot\" 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 ja konteinerid \u2013 milline saab olema nende \u00fchisosa tulevik<\/h4>\n<p>\nAutor: Mark Little<br \/>\nSee esitlus tutvustab Java ajalugu ja selgitab, miks Quarkus on Java tulevik.<\/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=\"Vaata videot\" 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: \u00fclikiire subaatomarne Java<\/h4>\n<p>\nAutor: Dimitris Andreadis<br \/>\n\u00dclevaade Quarkuse eelistest, mis on arendajate seas tunnustust leidnud: lihtsus, \u00fcliv\u00f5rdsed kiirus, parimad teegid ja standardid.<\/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=\"Vaata videot\" 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 ja subaatomised reaktiivsed s\u00fcsteemid<\/h4>\n<p>\nAutor: Clement Escoffier<br \/>\nGraalVM integreerimise abil tagab Quarkus \u00fclikiire arendusprotsessi ja subaatomilise jooksukeskkonna. Autor r\u00e4\u00e4gib Quarkuse reaktiivsest k\u00fcljest ja sellest, kuidas seda kasutada reaktiivsete rakenduste ja voogedastuse rakenduste loomisel.<\/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=\"Vaata videot\" 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 ja kiire rakenduste arendus Eclipse MicroProfile'is<\/h4>\n<p>\nAutor: John Clingan<br \/>\nKombineerides Eclipse MicroProfile'i ja Quarkuse, saavad arendajad luua t\u00e4isfunktsionaalseid MicroProfile konteinerrakendusi, mis k\u00e4ivitatakse m\u00f5ne k\u00fcmne millisekundi jooksul. Videos n\u00e4idatakse \u00fcksikasjalikult, kuidas kodeerida konteinerrakendust MicroProfile'i jaoks Kuberneteses juurutamiseks.<\/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=\"Vaata videot\" 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\" versioon<\/h4>\n<p>\nAutor: Marcus Biel<br \/>\nAutor n\u00e4itab, kuidas kasutada Quarkust superv\u00e4ikeste ja \u00fcli kiirete Java konteinerite loomiseks, mis v\u00f5imaldavad saavutada t\u00f5elist l\u00e4bimurret, eriti serverivabades keskkondades.<\/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=\"Vaata videot\" 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 \/>Allikas: <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 4.9.10 - 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 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\" \/>\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\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\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\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 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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47Kuidas Quarkus \u00fchendab imperatiivse ja reaktiivse programmeerimise | ProHoster","description":"Sel aastal plaanime t\u00f5siselt tegeleda konteinerite, Cloud-Native Java ja Kubernetes teemadega. Loogiline j\u00e4tk nendele teemadele oleks juttu r\u00e4\u00e4kida Quarkuse raamistikust, millest juba r\u00e4\u00e4giti Habr's. T\u00e4nane artikkel pole niiv\u00f5rd p\u00fchendatud \u201esubatomaarse \u00fclikiire Java\u201d struktuurile, vaid pigem neile v\u00f5imalustele, mida Quarkus toob ettev\u00f5tte arengusse. Java ja JVM on endiselt \u00e4\u00e4rmiselt populaarsed, kuid serverita tehnoloogiate kasutamisel.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","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\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 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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74795","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=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}