{"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\/cs\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Jak Quarkus spojuje imperativn\u00ed a reaktivn\u00ed programov\u00e1n\u00ed","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tento rok pl\u00e1nujeme v\u00e1\u017en\u011b rozv\u00edjet t\u00e9mata kontejner\u016f, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Cloud-Native Java<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Logick\u00fdm pokra\u010dov\u00e1n\u00edm t\u011bchto t\u00e9mat bude p\u0159edstaven\u00ed frameworku Quarkus, ji\u017e <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">projednan\u00e9ho<\/a><\/noindex> na Habru. Dne\u0161n\u00ed \u010dl\u00e1nek se nev\u011bnuje tolik struktu\u0159e 'subatom\u00e1rn\u00ed superrychl\u00e9 Java', ale perspektiv\u00e1m, kter\u00e9 Quarkus p\u0159in\u00e1\u0161\u00ed do Enterprise.<\/p>\n<p><img decoding=\"async\" alt=\"Jak Quarkus spojuje imperativn\u00ed a reaktivn\u00ed programov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava a JVM jsou st\u00e1le mimo\u0159\u00e1dn\u011b popul\u00e1rn\u00ed, ale p\u0159i pr\u00e1ci s bezserverov\u00fdmi technologiemi a cloudov\u011b orientovan\u00fdmi mikroservisy se Java a dal\u0161\u00ed jazyky pro JVM pou\u017e\u00edvaj\u00ed st\u00e1le m\u00e9n\u011b, proto\u017ee zab\u00edraj\u00ed p\u0159\u00edli\u0161 mnoho pam\u011bti a p\u0159\u00edli\u0161 pomalu se na\u010d\u00edtaj\u00ed, co\u017e je \u010din\u00ed nevhodn\u00fdmi pro pou\u017eit\u00ed s kr\u00e1tkodob\u00fdmi kontejnery. Na\u0161t\u011bst\u00ed se tato situace v sou\u010dasnosti za\u010d\u00edn\u00e1 m\u011bnit d\u00edky Quarkus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Superrychl\u00e1 subatom\u00e1rn\u00ed Java dos\u00e1hla nov\u00e9ho levelu!<\/h3>\n<p>\n42 vyd\u00e1n\u00ed, 8 m\u011bs\u00edc\u016f pr\u00e1ce komunity a 177 \u00fa\u017easn\u00fdch v\u00fdvoj\u00e1\u0159\u016f \u2013 v\u00fdsledkem toho v\u0161eho bylo vyd\u00e1n\u00ed v listopadu 2019 <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, vyd\u00e1n\u00ed, kter\u00e9 p\u0159edstavuje d\u016fle\u017eit\u00fd mezn\u00edk v rozvoji projektu a nab\u00edz\u00ed spoustu skv\u011bl\u00fdch funkc\u00ed a mo\u017enost\u00ed (v\u00edce o nich se lze do\u010d\u00edst v <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">ozn\u00e1men\u00ed<\/a><\/noindex>).<\/p>\n<p>Dnes v\u00e1m uk\u00e1\u017eeme, jak Quarkus spojuje modely imperativn\u00edho a reaktivn\u00edho programov\u00e1n\u00ed na z\u00e1klad\u011b jednotn\u00e9ho reaktivn\u00edho j\u00e1dra. Za\u010dneme kr\u00e1tk\u00fdm exkurzem do historie, a pot\u00e9 podrobn\u011b prozkoum\u00e1me, v \u010dem spo\u010d\u00edv\u00e1 dualismus reaktivn\u00edho j\u00e1dra Quarkus a jak <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Javy<\/a><\/noindex>-v\u00fdvoj\u00e1\u0159i mohou vyu\u017e\u00edt t\u011bchto v\u00fdhod.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Mikroservisy<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">udr\u017eovan\u00e9 ud\u00e1lostmi architektury<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">bezserverov\u00e9<\/a><\/noindex>-Funkce \u2013 to v\u0161echno je dnes, co se naz\u00fdv\u00e1, na vzestupu. V posledn\u00ed dob\u011b se vytv\u00e1\u0159en\u00ed cloudov\u011b orientovan\u00fdch architektur stalo mnohem jednodu\u0161\u0161\u00edm a dostupn\u011bj\u0161\u00edm, p\u0159esto z\u016fst\u00e1vaj\u00ed ur\u010dit\u00e9 probl\u00e9my \u2013 zejm\u00e9na pro v\u00fdvoj\u00e1\u0159e v Jav\u011b. Nap\u0159\u00edklad v p\u0159\u00edpad\u011b serverless funkc\u00ed a mikroservis\u016f existuje nal\u00e9hav\u00e1 pot\u0159eba zkr\u00e1tit dobu spu\u0161t\u011bn\u00ed, sn\u00ed\u017eit spot\u0159ebu pam\u011bti a ud\u011blat jejich v\u00fdvoj pohodln\u011bj\u0161\u00edm a p\u0159\u00edjemn\u011bj\u0161\u00edm. Java v posledn\u00edch letech provedla n\u011bkolik vylep\u0161en\u00ed, jako je vylep\u0161en\u00e1 ergonomika pro kontejnery a dal\u0161\u00ed. Av\u0161ak dos\u00e1hnout norm\u00e1ln\u00edho fungov\u00e1n\u00ed Javy v kontejneru je st\u00e1le obt\u00ed\u017en\u00e9. Proto za\u010dneme t\u00edm, \u017ee se pod\u00edv\u00e1me na n\u011bkter\u00e9 z vnit\u0159n\u00edch slo\u017eitost\u00ed Javy, kter\u00e9 se zejm\u00e9na projevuj\u00ed p\u0159i v\u00fdvoji kontejnerov\u011b orientovan\u00fdch Java aplikac\u00ed.<\/p>\n<p>Nejprve se vra\u0165me k historii.<\/p>\n<p><img decoding=\"async\" alt=\"Jak Quarkus spojuje imperativn\u00ed a reaktivn\u00ed programov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>T\u00e9my a kontejnery<\/h3>\n<p>\nOd verze 8u131 za\u010dala Java v\u00edce m\u00e9n\u011b podporovat kontejnery d\u00edky vylep\u0161en\u00edm v ergonomick\u00fdch funkc\u00edch. Konkr\u00e9tn\u011b nyn\u00ed JVM v\u00ed, na kolika procesorov\u00fdch j\u00e1drech b\u011b\u017e\u00ed, a m\u016f\u017ee odpov\u00eddaj\u00edc\u00edm zp\u016fsobem nastavit pooly vl\u00e1ken \u2013 obvykle pooly fork\/join. To je bezpochyby skv\u011bl\u00e9, ale dejme tomu, \u017ee m\u00e1me tradi\u010dn\u00ed webovou aplikaci, kter\u00e1 pou\u017e\u00edv\u00e1 HTTP servlet a b\u011b\u017e\u00ed na Tomcat, Jetty a podobn\u011b. V d\u016fsledku toho tato aplikace vyd\u00e1v\u00e1 ka\u017ed\u00e9mu po\u017eadavku samostatn\u00e9 vl\u00e1kno a umo\u017e\u0148uje mu blokovat toto vl\u00e1kno p\u0159i \u010dek\u00e1n\u00ed na vstupn\u011b-v\u00fdstupn\u00ed operace, nap\u0159\u00edklad p\u0159i dotazu na datab\u00e1zi, soubory nebo jin\u00e9 slu\u017eby. To znamen\u00e1, \u017ee velikost takov\u00e9 aplikace z\u00e1vis\u00ed nikoli na po\u010dtu dostupn\u00fdch jader, ale na po\u010dtu soub\u011b\u017en\u00fdch po\u017eadavk\u016f. Krom\u011b toho to znamen\u00e1, \u017ee kv\u00f3ty nebo limity v Kubernetes t\u00fdkaj\u00edc\u00ed se po\u010dtu jader tu p\u0159\u00edli\u0161 nepomohou, a v\u011bc nakonec skon\u010d\u00ed throttlingem.<\/p>\n<h3>Vy\u010derp\u00e1n\u00ed pam\u011bti<\/h3>\n<p>\nToky \u2013 to pam\u011b\u0165. A intra-kontejnerov\u00e1 omezen\u00ed pam\u011bti rozhodn\u011b nejsou panaceou. Sta\u010d\u00ed jen za\u010d\u00edt zvy\u0161ovat po\u010det aplikac\u00ed a tok\u016f, a d\u0159\u00edve \u010di pozd\u011bji se setk\u00e1te s kritick\u00fdm n\u00e1r\u016fstem frekvence p\u0159ep\u00edn\u00e1n\u00ed a tedy i s degradac\u00ed v\u00fdkonu. Krom\u011b toho, pokud aplikace pou\u017e\u00edv\u00e1 tradi\u010dn\u00ed mikroslu\u017ebov\u00e9 frameworky, nebo se p\u0159ipojuje k DB, nebo vy\u017eaduje ke\u0161ov\u00e1n\u00ed, nebo n\u011bjak\u00fdm zp\u016fsobem jinak spot\u0159ebov\u00e1v\u00e1 pam\u011b\u0165, zcela jist\u011b pot\u0159ebujete n\u00e1stroj, kter\u00fd v\u00e1m umo\u017en\u00ed nahl\u00e9dnout dovnit\u0159 JVM a pod\u00edvat se, jak spravuje pam\u011b\u0165, ani\u017e byste ji p\u0159itom zabili (nap\u0159\u00edklad XX:+UseCGroupMemoryLimitForHeap). A p\u0159esto\u017ee od Java 9 JVM nau\u010dila a p\u0159ij\u00edmat cgroups a p\u0159izp\u016fsobit se jim, rezervace a spr\u00e1va pam\u011bti z\u016fst\u00e1v\u00e1 pom\u011brn\u011b slo\u017eitou z\u00e1le\u017eitost\u00ed.<\/p>\n<h3>Kv\u00f3ty a limity<\/h3>\n<p>\nV Java 11 byla p\u0159id\u00e1na podpora CPU-kv\u00f3t (nap\u0159. PreferContainerQuotaForCPUCount). Kubernetes tak\u00e9 nab\u00edz\u00ed podporu limit\u016f a kv\u00f3t. Ano, to v\u0161echno d\u00e1v\u00e1 smysl, ale pokud aplikace op\u011bt vyjde za vymezenou kv\u00f3tu, op\u011bt se dost\u00e1v\u00e1me k tomu, \u017ee velikost \u2013 stejn\u011b jako v p\u0159\u00edpad\u011b tradi\u010dn\u00edch Java aplikac\u00ed \u2013 je ur\u010dena po\u010dtem jader a s p\u0159i\u0159azen\u00edm jednoho vl\u00e1kna na ka\u017ed\u00fd po\u017eadavek, tedy to v\u0161echno ve velk\u00e9 m\u00ed\u0159e postr\u00e1d\u00e1 smysl.<br \/>\nKrom\u011b toho, pokud pou\u017eijeme kv\u00f3ty a limity nebo funkce horizont\u00e1ln\u00edho (scale-out) \u0161k\u00e1lov\u00e1n\u00ed platformy, kter\u00e1 le\u017e\u00ed na z\u00e1klad\u011b Kubernetes, probl\u00e9m se tak\u00e9 nevy\u0159e\u0161\u00ed s\u00e1m o sob\u011b. Jen prost\u011b vynakl\u00e1d\u00e1me v\u00edce zdroj\u016f na \u0159e\u0161en\u00ed p\u016fvodn\u00edho probl\u00e9mu, nebo nakonec p\u0159ijdeme k p\u0159e\u010derp\u00e1v\u00e1n\u00ed zdroj\u016f. A pokud jde o vysoce zat\u00ed\u017een\u00fd syst\u00e9m v ve\u0159ejn\u00e9m cloudov\u00e9m prost\u0159ed\u00ed, t\u00e9m\u011b\u0159 s jistotou za\u010d\u00edn\u00e1me vyu\u017e\u00edvat v\u00edce zdroj\u016f, ne\u017e je skute\u010dn\u011b pot\u0159eba.<\/p>\n<h3>A co s t\u00edm v\u0161\u00edm d\u011blat?<\/h3>\n<p>\nPokud to vezmeme jednodu\u0161e, pou\u017e\u00edvejte asynchronn\u00ed a neblokuj\u00edc\u00ed knihovny pro vstup a v\u00fdstup a frameworky jako 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> nebo Akka. Jsou mnohem l\u00e9pe p\u0159izp\u016fsobeny pro pr\u00e1ci v kontejnerech d\u00edky sv\u00e9 reaktivn\u00ed povaze. D\u00edky neblo\u010den\u00e9mu vstupu a v\u00fdstupu m\u016f\u017ee jeden stejn\u00fd vl\u00e1kno zpracov\u00e1vat v\u00edce sou\u010dasn\u00fdch po\u017eadavk\u016f. Zat\u00edmco jeden po\u017eadavek \u010dek\u00e1 na v\u00fdsledky vstupu a v\u00fdstupu, vl\u00e1kno, kter\u00e9 ho zpracov\u00e1v\u00e1, se uvol\u0148uje a bere si jin\u00fd po\u017eadavek. A kdy\u017e kone\u010dn\u011b p\u0159ich\u00e1zej\u00ed v\u00fdsledky vstupu a v\u00fdstupu, zpracov\u00e1n\u00ed prvn\u00edho po\u017eadavku pokra\u010duje. St\u0159\u00edd\u00e1n\u00edm zpracov\u00e1n\u00ed po\u017eadavk\u016f na stejn\u00e9m vl\u00e1kn\u011b lze sn\u00ed\u017eit celkov\u00fd po\u010det vl\u00e1ken a sn\u00ed\u017eit spot\u0159ebu zdroj\u016f na zpracov\u00e1n\u00ed po\u017eadavk\u016f.<\/p>\n<p>P\u0159i neblo\u010den\u00e9m vstupu a v\u00fdstupu se po\u010det jader st\u00e1v\u00e1 kl\u00ed\u010dov\u00fdm parametrem, proto\u017ee to ur\u010duje, kolik vl\u00e1ken vstupu a v\u00fdstupu m\u016f\u017ee b\u011b\u017eet paraleln\u011b. P\u0159i spr\u00e1vn\u00e9m vyu\u017eit\u00ed to umo\u017e\u0148uje efektivn\u011b rozd\u011blovat z\u00e1t\u011b\u017e mezi j\u00e1dry a vyrovnat se s vy\u0161\u0161\u00edmi z\u00e1t\u011b\u017eemi s men\u0161\u00edmi zdroji.<\/p>\n<h3>Jak, a to je v\u0161e?<\/h3>\n<p>\nNe, je tu je\u0161t\u011b n\u011bco. Reaktivn\u00ed programov\u00e1n\u00ed pom\u00e1h\u00e1 l\u00e9pe vyu\u017e\u00edvat zdroje, ale tak\u00e9 m\u00e1 svou cenu. Zejm\u00e9na, k\u00f3d bude t\u0159eba p\u0159epsat podle princip\u016f neblo\u010denosti a vyhnout se blokov\u00e1n\u00ed vl\u00e1ken vstupu a v\u00fdstupu. To je zcela jin\u00fd model v\u00fdvoje a prov\u00e1d\u011bn\u00ed. A p\u0159esto\u017ee existuje \u0159ada u\u017eite\u010dn\u00fdch knihoven, je to st\u00e1le radik\u00e1ln\u00ed zm\u011bna ve zp\u016fsobu my\u0161len\u00ed.<\/p>\n<p>Za prv\u00e9, mus\u00edte se nau\u010dit ps\u00e1t k\u00f3d, kter\u00fd se vykon\u00e1v\u00e1 asynchronn\u011b. Jakmile za\u010dnete pou\u017e\u00edvat neblo\u010den\u00fd vstup a v\u00fdstup, mus\u00edte explicitn\u011b uv\u00e9st, co se m\u00e1 st\u00e1t p\u0159i p\u0159\u00edjmu odpov\u011bdi na po\u017eadavek. U\u017e nen\u00ed mo\u017en\u00e9 jen blokovat a \u010dekat. M\u00edsto toho m\u016f\u017eete p\u0159ed\u00e1vat zp\u011btn\u00e9 vol\u00e1n\u00ed, pou\u017e\u00edvat reaktivn\u00ed programov\u00e1n\u00ed nebo pokra\u010dov\u00e1n\u00ed. Ale to nen\u00ed v\u0161e: abyste mohli pou\u017e\u00edvat neblo\u010den\u00fd vstup a v\u00fdstup, pot\u0159ebujete tak\u00e9 neblo\u010den\u00e9 servery a klienty, a to ide\u00e1ln\u011b na v\u0161ech m\u00edstech. V p\u0159\u00edpad\u011b HTTP je to jednoduch\u00e9, ale tak\u00e9 existuj\u00ed datab\u00e1ze, souborov\u00e9 syst\u00e9my a mnohem v\u00edce.<\/p>\n<p>A p\u0159esto\u017ee tot\u00e1ln\u00ed pr\u016f\u0159ezov\u00e1 reaktivita poskytuje maxim\u00e1ln\u00ed efektivitu, takov\u00fd posun m\u016f\u017ee b\u00fdt obt\u00ed\u017en\u00e9 str\u00e1vit v praxi. Proto je mo\u017enost kombinovat reaktivn\u00ed a imperativn\u00ed k\u00f3d nezbytn\u00fdm p\u0159edpokladem pro to, aby:<\/p>\n<ol>\n<li>Efektivn\u011b vyu\u017e\u00edvat zdroje na nejv\u00edce zat\u00ed\u017een\u00fdch sm\u011brech softwarov\u00e9ho syst\u00e9mu;<\/li>\n<li>Pou\u017e\u00edvat jednodu\u0161\u0161\u00ed styl k\u00f3du v jeho ostatn\u00edch \u010d\u00e1stech.<\/li>\n<\/ol>\n<p><\/p>\n<h3>P\u0159edstavujeme Quarkus<\/h3>\n<p>\nV tom je vlastn\u011b podstata Quarkus \u2013 spojit reaktivn\u00ed a imperativn\u00ed modely v r\u00e1mci jednoho b\u011bhov\u00e9ho prost\u0159ed\u00ed.<\/p>\n<p>V z\u00e1kladu Quarkus le\u017e\u00ed Vert.x a Netty, nad kter\u00fdmi je vyu\u017e\u00edv\u00e1na cel\u00e1 \u0159ada reaktivn\u00edch r\u00e1mc\u016f a roz\u0161\u00ed\u0159en\u00ed, kter\u00e9 maj\u00ed pomoci v\u00fdvoj\u00e1\u0159\u016fm. Quarkus je ur\u010den k budov\u00e1n\u00ed nejen HTTP mikroslu\u017eeb, ale i architektur \u0159\u00edzen\u00fdch ud\u00e1lostmi. D\u00edky sv\u00e9 reaktivn\u00ed povaze velmi efektivn\u011b pracuje se syst\u00e9my pro v\u00fdm\u011bnu zpr\u00e1v (Apache Kafka, AMQP atd.).<\/p>\n<p>Cel\u00e1 finta spo\u010d\u00edv\u00e1 v tom, jak vyu\u017e\u00edvat jeden a tent\u00fd\u017e reaktivn\u00ed motor jak pro imperativn\u00ed, tak pro reaktivn\u00ed k\u00f3d.<\/p>\n<p><img decoding=\"async\" alt=\"Jak Quarkus spojuje imperativn\u00ed a reaktivn\u00ed programov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus s t\u00edm skv\u011ble zach\u00e1z\u00ed. Volba mezi imperativn\u00edm a reaktivn\u00edm je jasn\u00e1 \u2013 pou\u017e\u00edt pro oboj\u00ed reaktivn\u00ed j\u00e1dro. A s \u010d\u00edm velmi pom\u00e1h\u00e1, je rychl\u00fd neblokuj\u00edc\u00ed k\u00f3d, kter\u00fd zpracov\u00e1v\u00e1 t\u00e9m\u011b\u0159 v\u0161e, co proch\u00e1z\u00ed cyklem ud\u00e1lost\u00ed (event-loop thread, tak\u00e9 zn\u00e1m\u00fd jako IO thread). Ale pokud m\u00e1te klasick\u00e9 REST aplikace nebo aplikace na stran\u011b klienta, Quarkus m\u00e1 p\u0159ipraven\u00fd imperativn\u00ed model programov\u00e1n\u00ed. Nap\u0159\u00edklad podpora HTTP v Quarkus je postavena na vyu\u017eit\u00ed neblokuj\u00edc\u00edho a reaktivn\u00edho motoru (Eclipse Vert.x a Netty). V\u0161echny HTTP po\u017eadavky, kter\u00e9 va\u0161e aplikace obdr\u017e\u00ed, nejprve proch\u00e1zej\u00ed cyklem ud\u00e1lost\u00ed (IO Thread) a pot\u00e9 jsou odesl\u00e1ny t\u00e9 \u010d\u00e1sti k\u00f3du, kter\u00e1 spravuje po\u017eadavky. V z\u00e1vislosti na c\u00edli m\u016f\u017ee b\u00fdt k\u00f3d spr\u00e1vy po\u017eadavk\u016f vol\u00e1n v r\u00e1mci samostatn\u00e9ho vl\u00e1kna (tzv. worker thread, pou\u017e\u00edv\u00e1 se v p\u0159\u00edpad\u011b servlett\u016f a Jax-RS) nebo vyu\u017e\u00edt p\u016fvodn\u00ed vstupn\u011b-v\u00fdstupn\u00ed vl\u00e1kno (reaktivn\u00ed trasa).<\/p>\n<p><img decoding=\"async\" alt=\"Jak Quarkus spojuje imperativn\u00ed a reaktivn\u00ed programov\u00e1n\u00ed\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Pro konektory syst\u00e9m\u016f pro p\u0159enos zpr\u00e1v se pou\u017e\u00edvaj\u00ed neblokuj\u00edc\u00ed klienti, kte\u0159\u00ed pracuj\u00ed nad motorem Vert.x. Proto m\u016f\u017eete efektivn\u011b odes\u00edlat, p\u0159ij\u00edmat a zpracov\u00e1vat zpr\u00e1vy ze syst\u00e9m\u016f typu messaging middleware.<\/p>\n<p>Na webu <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> bylo shrom\u00e1\u017ed\u011bno n\u011bkolik dobr\u00fdch n\u00e1vod\u016f, kter\u00e9 v\u00e1m pomohou za\u010d\u00edt pracovat s Quarkus:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Pou\u017e\u00edv\u00e1n\u00ed reaktivn\u00edch tras<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Reaktivn\u00ed SQL klienti<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Pou\u017e\u00edv\u00e1n\u00ed Apache Kafka s reaktivn\u00edm pos\u00edl\u00e1n\u00edm zpr\u00e1v<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">Pou\u017e\u00edv\u00e1n\u00ed AMQP s reaktivn\u00edm pos\u00edl\u00e1n\u00edm zpr\u00e1v<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Pou\u017e\u00edv\u00e1n\u00ed Vertx API<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nKrom\u011b toho jsme p\u0159ipravili online praktick\u00e9 lekce pro sezn\u00e1men\u00ed se s r\u016fzn\u00fdmi aspekty reaktivn\u00edho programov\u00e1n\u00ed, p\u0159i\u010dem\u017e k jejich absolvov\u00e1n\u00ed pot\u0159ebujete pouze prohl\u00ed\u017ee\u010d, \u017e\u00e1dn\u00e1 IDE nen\u00ed nutn\u00e1 a po\u010d\u00edta\u010d nen\u00ed povinn\u00fd. Tyto lekce najdete <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">zde<\/a><\/noindex>.<\/p>\n<h3>U\u017eite\u010dn\u00e9 zdroje<\/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 d\u016fvody, pro\u010d vyzkou\u0161et Quarkus<\/a><\/noindex><\/li>\n<li>Webov\u00e1 str\u00e1nka projektu Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Projekt Quarkus na GitHubu \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Twitter projektu Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Chat projektu Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>F\u00f3ra projektu Quarkus \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 video lekc\u00ed o Quarkus, abyste se sezn\u00e1mili s t\u00e9matem<\/h3>\n<p>\nJak p\u00ed\u0161\u00ed na webu <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 je <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-orientovan\u00fd Java stack ur\u010den\u00fd pro GraalVM a OpenJDK HotSpot, slo\u017een\u00fd z nejlep\u0161\u00edch Java knihoven a standard\u016f.<\/p>\n<p>Abychom v\u00e1m pomohli se v t\u00e9matu zorientovat, vybrali jsme 10 video lekc\u00ed, kter\u00e9 pokr\u00fdvaj\u00ed r\u016fzn\u00e9 aspekty Quarkus a jeho pou\u017eit\u00ed:<\/p>\n<h4>1. P\u0159edstavujeme Quarkus: Java framework nov\u00e9 generace pro Kubernetes<\/h4>\n<p>\nAuto\u0159i: Thomas Qvarnstrom a Jason Greene<br \/>\nC\u00edlem projektu Quarkus je vytvo\u0159it Java platformu pro Kubernetes a serverless prost\u0159ed\u00ed, stejn\u011b jako spojit reaktivn\u00ed a imperativn\u00ed modely programov\u00e1n\u00ed v r\u00e1mci jednotn\u00e9ho b\u011bhov\u00e9ho prost\u0159ed\u00ed, aby si v\u00fdvoj\u00e1\u0159i mohli flexibiln\u011b vyb\u00edrat p\u0159\u00edstupy p\u0159i pr\u00e1ci se \u0161irok\u00fdm spektrem distribuovan\u00fdch architektur aplikac\u00ed. V\u00edce se dozv\u00edte z \u00favodn\u00ed p\u0159edn\u00e1\u0161ky n\u00ed\u017ee.<\/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=\"P\u0159ehr\u00e1t video\" 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: superrychl\u00e1 subatom\u00e1rn\u00ed Java<\/h4>\n<p>\nAutor: Burr Sutter<br \/>\nVideo lekce z internetov\u00e9 p\u0159edn\u00e1\u0161ky DevNation Live demonstruje, jak pou\u017e\u00edvat Quarkus k optimalizaci podnikov\u00fdch Java aplikac\u00ed, API, mikroslu\u017eeb a serverless funkc\u00ed v prost\u0159ed\u00ed Kubernetes\/OpenShift, aby byly mnohem men\u0161\u00ed, rychlej\u0161\u00ed a \u0161k\u00e1lovateln\u011bj\u0161\u00ed.<\/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=\"P\u0159ehr\u00e1t video\" 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 a GraalVM: zrychlen\u00ed Hibernate na super rychlosti a zmen\u0161en\u00ed na subatom\u00e1rn\u00ed velikosti<\/h4>\n<p>\nAutor: Sanne Grinovero<br \/>\nZ prezentace se dozv\u00edte, jak vznikl Quarkus, jak funguje a jak umo\u017e\u0148uje, aby komplexn\u00ed knihovny, jako Hibernate ORM, byly kompatibiln\u00ed s native obrazy GraalVM.<\/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=\"P\u0159ehr\u00e1t video\" 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. U\u010d\u00edme se vyv\u00edjet serverless aplikace<\/h4>\n<p>\nAutor: Marthen Luther<br \/>\nVe videu n\u00ed\u017ee je uk\u00e1z\u00e1no, jak vytvo\u0159it jednoduchou Java aplikaci pomoc\u00ed Quarkus a nasadit ji jako serverless aplikaci na Knative.<\/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=\"P\u0159ehr\u00e1t video\" 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\u00f3dujte s pot\u011b\u0161en\u00edm<\/h4>\n<p>\nAutor: Edson Yanaga<br \/>\nVideoguide k vytvo\u0159en\u00ed va\u0161eho prvn\u00edho projektu Quarkus, kter\u00fd ukazuje, pro\u010d si Quarkus z\u00edsk\u00e1v\u00e1 srdce v\u00fdvoj\u00e1\u0159\u016f.<\/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=\"P\u0159ehr\u00e1t video\" 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 a kontejnery \u2013 jak\u00e1 bude jejich spole\u010dn\u00e1 budoucnost<\/h4>\n<p>\nAutor: Mark Little<br \/>\nTato prezentace seznamuje s histori\u00ed Javy a vysv\u011btluje, pro\u010d je Quarkus budoucnost\u00ed Javy.<\/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=\"P\u0159ehr\u00e1t video\" 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: ultrarychl\u00e1 subatomov\u00e1 Java<\/h4>\n<p>\nAutor: Dimitris Andreadis<br \/>\nP\u0159ehled v\u00fdhod Quarkus, kter\u00fdmi si z\u00edskal uzn\u00e1n\u00ed v\u00fdvoj\u00e1\u0159\u016f: jednoduchost, extr\u00e9mn\u00ed rychlost, nejlep\u0161\u00ed knihovny a standardy.<\/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=\"P\u0159ehr\u00e1t video\" 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 a subatomov\u00e9 reaktivn\u00ed syst\u00e9my<\/h4>\n<p>\nAutor: Cl\u00e9ment Escoffier<br \/>\nD\u00edky integraci s GraalVM poskytuje Quarkus ultrarychl\u00e9 v\u00fdvojov\u00e9 zku\u0161enosti a subatomov\u00e9 prost\u0159ed\u00ed pro spu\u0161t\u011bn\u00ed. Autor hovo\u0159\u00ed o reaktivn\u00ed str\u00e1nce Quarkus a o tom, jak ji vyu\u017e\u00edt p\u0159i vytv\u00e1\u0159en\u00ed reaktivn\u00edch aplikac\u00ed a aplikac\u00ed pro streamov\u00e1n\u00ed dat.<\/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=\"P\u0159ehr\u00e1t video\" 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 a rychl\u00fd v\u00fdvoj aplikac\u00ed v Eclipse MicroProfile<\/h4>\n<p>\nAutor: John Clingan<br \/>\nSpojen\u00edm Eclipse MicroProfile a Quarkus mohou v\u00fdvoj\u00e1\u0159i vytv\u00e1\u0159et pln\u011b funk\u010dn\u00ed kontejnerov\u00e9 aplikace MicroProfile, kter\u00e9 se spou\u0161t\u011bj\u00ed b\u011bhem n\u011bkolika desetin sekund. Video podrobn\u011b popisuje, jak k\u00f3dovat kontejnerovou aplikaci MicroProfile pro nasazen\u00ed na platform\u011b Kubernetes.<\/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=\"P\u0159ehr\u00e1t video\" 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, verze \u201eTurbo\u201c<\/h4>\n<p>\nAutor: Marcus Biel<br \/>\nAutor ukazuje, jak pou\u017e\u00edt Quarkus k vytv\u00e1\u0159en\u00ed supermal\u00fdch a superrychl\u00fdch Java kontejner\u016f, kter\u00e9 umo\u017e\u0148uj\u00ed skute\u010dn\u00fd pr\u016flom, zejm\u00e9na v serverless prost\u0159ed\u00edch.<\/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=\"P\u0159ehr\u00e1t video\" 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 \/>Zdroj: <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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\udd47Jak Quarkus spojuje imperativn\u00ed a reaktivn\u00ed programov\u00e1n\u00ed | ProHoster","description":"V tomto roce pl\u00e1nujeme v\u00e1\u017en\u011b rozv\u00edjet t\u00e9mata kontejner\u016f, Cloud-Native Java a","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}