{"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\/sq\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Si Quarkus kombinon programimin imperativ dhe reaktiv","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>K\u00ebt\u00eb vit ne planifikojm\u00eb t\u00eb zhvillojm\u00eb seriozisht temat e kontejner\u00ebve, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Java e Orientuar n\u00eb Re<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Nj\u00eb vazhdim logjik i k\u00ebtyre temave do t\u00eb jet\u00eb diskutimi mbi korniz\u00ebn Quarkus, e cila \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">shqyrtuar<\/a><\/noindex> n\u00eb Habra. Artikulli i sot\u00ebm i kushtohet m\u00eb shum\u00eb perspektivave q\u00eb Quarkus sjell n\u00eb Enterprise sesa struktures s\u00eb \"Java-s\u00eb subatomike super t\u00eb shpejt\u00eb\".<\/p>\n<p><img decoding=\"async\" alt=\"Si Quarkus kombinon programimin imperativ dhe reaktiv\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava dhe JVM vazhdojn\u00eb t\u00eb jen\u00eb jasht\u00ebzakonisht t\u00eb njohura, por gjat\u00eb pun\u00ebs me teknologjit\u00eb pa server dhe mikrosh\u00ebrbimet e orientuara n\u00eb re, Java dhe gjuh\u00eb t\u00eb tjera p\u00ebr JVM p\u00ebrdoren gjithnj\u00eb e m\u00eb pak, pasi ato z\u00ebn\u00eb shum\u00eb hap\u00ebsir\u00eb n\u00eb memorje dhe ngarkohen shum\u00eb ngadal\u00eb, duke i b\u00ebr\u00eb ato t\u00eb pap\u00ebrshtatshme p\u00ebr p\u00ebrdorim me kontejner\u00eb me jet\u00eb t\u00eb shkurt\u00ebr. P\u00ebr fat t\u00eb mir\u00eb, kjo situat\u00eb po fillon t\u00eb ndryshoj\u00eb fal\u00eb Quarkus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Java subatomike super e shpejt\u00eb ka arritur nj\u00eb nivel t\u00eb ri!<\/h3>\n<p>\n42 l\u00ebshime, 8 muaj pun\u00eb nga komuniteti dhe 177 zhvillues t\u00eb mrekulluesh\u00ebm \u2013 p\u00ebrfundimi i t\u00eb gjitha k\u00ebtyre ishte l\u00ebshimi n\u00eb n\u00ebntor 2019 <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, nj\u00eb l\u00ebshim q\u00eb sh\u00ebnon nj\u00eb pik\u00eb t\u00eb r\u00ebnd\u00ebsishme n\u00eb zhvillimin e projektit dhe ofron nj\u00eb gam\u00eb t\u00eb madhe funksionesh dhe mund\u00ebsish t\u00eb mrekullueshme (m\u00eb shum\u00eb rreth tyre mund t\u00eb lexoni n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">njoftimin<\/a><\/noindex>).<\/p>\n<p>Sot ne do t\u00eb flasim se si Quarkus bashkon modelet e programimit imperativ dhe reaktiv mbi nj\u00eb b\u00ebrtham\u00eb reaktive t\u00eb vetme. Do t\u00eb fillojm\u00eb me nj\u00eb shikim t\u00eb shkurt\u00ebr n\u00eb histori dhe pastaj do t\u00eb shqyrtojm\u00eb n\u00eb detaje se \u00e7far\u00eb p\u00ebrb\u00ebn dualizmi i b\u00ebrtham\u00ebs reaktive t\u00eb Quarkus dhe se si <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>- zhvilluesit mund t\u00eb shfryt\u00ebzojn\u00eb k\u00ebto p\u00ebrfitime.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Mikrosh\u00ebrbimet<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">arkitekturat e menaxhuara nga ngjarjet<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">funksionet pa server \u2013 t\u00eb gjitha k\u00ebto sot, si\u00e7 quhet, jan\u00eb n\u00eb rritje. Koh\u00ebt e fundit, krijimi i arkitekturave t\u00eb orientuara n\u00eb re \u00ebsht\u00eb b\u00ebr\u00eb shum\u00eb m\u00eb i leht\u00eb dhe m\u00eb i arritsh\u00ebm, por problemet kan\u00eb mbetur \u2013 ve\u00e7an\u00ebrisht p\u00ebr zhvilluesit Java. P\u00ebr shembull, n\u00eb rastin e funksioneve pa server dhe mikrosh\u00ebrbimeve, ekziston nj\u00eb nevoj\u00eb urgjente p\u00ebr t\u00eb shkurtuar koh\u00ebn e nisjes, p\u00ebr t\u00eb ulur shpenzimet e memories dhe p\u00ebr ta b\u00ebr\u00eb zhvillimin e tyre nj\u00eb proces m\u00eb t\u00eb leht\u00eb dhe m\u00eb t\u00eb k\u00ebndsh\u00ebm. Java n\u00eb vitet e fundit ka b\u00ebr\u00eb disa p\u00ebrmir\u00ebsime, si funksionaliteti i p\u00ebrmir\u00ebsuar p\u00ebr kontejner\u00eb dhe t\u00eb tjera. Megjithat\u00eb, arritja e nj\u00eb funksionimi t\u00eb duhur t\u00eb Java n\u00eb nj\u00eb kontejner mbetet ende e v\u00ebshtir\u00eb. Prandaj, do t\u00eb fillojm\u00eb duke shqyrtuar disa nga kompleksitetet e brendshme t\u00eb Java-s\u00eb, t\u00eb cilat shfaqen ve\u00e7an\u00ebrisht ashp\u00ebr gjat\u00eb zhvillimit t\u00eb aplikacioneve Java t\u00eb orientuara n\u00eb kontejner\u00eb.<\/a><\/noindex>-funksionet \u2013 t\u00eb gjitha k\u00ebto sot, q\u00eb quhet, jan\u00eb n\u00eb rritje. Q\u00eb nga koh\u00ebt e fundit, krijimi i arkitekturave t\u00eb orientuara nga reja \u00ebsht\u00eb b\u00ebr\u00eb shum\u00eb m\u00eb i thjesht\u00eb dhe i aksesuesh\u00ebm, megjithat\u00eb problemet mbeten - ve\u00e7an\u00ebrisht p\u00ebr zhvilluesit e Java. P\u00ebr shembull, n\u00eb rastin e funksioneve serverless dhe mikrosh\u00ebrbimeve, ekziston nj\u00eb nevoj\u00eb e madhe p\u00ebr t\u00eb reduktuar koh\u00ebn e nisjes, p\u00ebr t\u00eb ulur p\u00ebrdorimin e memories dhe p\u00ebr ta b\u00ebr\u00eb zhvillimin e tyre nj\u00eb proces m\u00eb t\u00eb rehatsh\u00ebm dhe t\u00eb k\u00ebndsh\u00ebm. Java, gjat\u00eb viteve t\u00eb fundit, ka sjell\u00eb disa p\u00ebrmir\u00ebsime, si funksionalitetin e p\u00ebrmir\u00ebsuar p\u00ebr konteiner\u00ebt dhe t\u00eb tjer\u00eb. Megjithat\u00eb, arritja e nj\u00eb funksionimi normal t\u00eb Java n\u00eb nj\u00eb konteiner ende mbetet nj\u00eb sfid\u00eb. Prandaj, do t\u00eb fillojm\u00eb me shqyrtimin e disa nga v\u00ebshtir\u00ebsit\u00eb e brendshme t\u00eb Java, t\u00eb cilat jan\u00eb ve\u00e7an\u00ebrisht t\u00eb dukshme gjat\u00eb zhvillimit t\u00eb aplikacioneve Java t\u00eb orientuara nga konteiner\u00ebt.<\/p>\n<p>Le t\u00eb flasim fillimisht p\u00ebr historin\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Si Quarkus kombinon programimin imperativ dhe reaktiv\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>T\u00eb dh\u00ebnat dhe kontejner\u00ebt<\/h3>\n<p>\nDuke filluar nga versioni 8u131, Java ka filluar t\u00eb mb\u00ebshtes\u00eb m\u00eb shum\u00eb kontejner\u00ebt fal\u00eb p\u00ebrmir\u00ebsimeve n\u00eb funksionalitetin ergonomik. N\u00eb ve\u00e7anti, tani JVM e di se n\u00eb sa b\u00ebrthama procesor\u00ebsh po ekzekutohet dhe mund t\u00eb konfiguroj\u00eb pools e thread-eve n\u00eb p\u00ebrputhje. Natyrisht, kjo \u00ebsht\u00eb fantastike, por le t\u00eb themi se kemi nj\u00eb aplikacion tradicional web q\u00eb p\u00ebrdor servleta HTTP dhe q\u00eb ekzekutohet n\u00eb Tomcat, Jetty etj. Si rezultat, ky aplikacion do t\u2019i jap\u00eb \u00e7do k\u00ebrkese nj\u00eb thread t\u00eb ve\u00e7ant\u00eb dhe do ta lejoj\u00eb at\u00eb t\u00eb bllokoj\u00eb k\u00ebt\u00eb thread duke pritur operacione I\/O, p\u00ebr shembull, gjat\u00eb qasjes n\u00eb DB, skedar\u00eb ose sh\u00ebrbime t\u00eb tjera. Pra, madh\u00ebsia e nj\u00eb aplikacioni t\u00eb till\u00eb varet jo nga numri i b\u00ebrthamave t\u00eb disponueshme, por nga numri i k\u00ebrkesave t\u00eb nj\u00ebkohshme. P\u00ebr m\u00eb tep\u00ebr, kjo do t\u00eb thot\u00eb se kuotat ose kufizimet n\u00eb Kubernetes p\u00ebr numrin e b\u00ebrthamave nuk do t\u00eb ndihmojn\u00eb ndjesh\u00ebm, dhe \u00e7\u00ebshtja p\u00ebrfundon n\u00eb ngadal\u00ebsim.<\/p>\n<h3>Shpenzimi i memories<\/h3>\n<p>\nThread-et jan\u00eb memorie. Dhe kufizimet e brendshme t\u00eb memories n\u00eb konteiner\u00eb nuk jan\u00eb nj\u00eb panacee. Filloni t\u00eb rritni numrin e aplikacioneve dhe thread-eve, dhe nj\u00eb dit\u00eb ose tjet\u00ebr do t\u00eb p\u00ebrballeni me nj\u00eb rritje kritike t\u00eb frekuenc\u00ebs s\u00eb kalimeve dhe, si pasoj\u00eb, me degradimin e performanc\u00ebs. P\u00ebr m\u00eb tep\u00ebr, n\u00ebse aplikacioni p\u00ebrdor kuadrot tradicionale mikro-sh\u00ebrbimesh ose lidhet me DB, ose angazhon caching, ose ndonj\u00eb tjet\u00ebr metod\u00eb q\u00eb harxhon memory, ju nevojitet nj\u00eb mjet q\u00eb ju lejon t\u00eb shihni brenda JVM dhe t\u00eb shihni se si menaxhon memoria, pa vrar\u00eb vet\u00eb JVM (p.sh., XX:+UseCGroupMemoryLimitForHeap). Dhe madje p\u00ebrkund\u00ebr faktit se, duke filluar nga Java 9, JVM ka m\u00ebsuar t\u00eb perceptoj\u00eb cgroups dhe t\u00eb adoptoj\u00eb sipas nevoj\u00ebs, rezervimi dhe menaxhimi i memories mbetet nj\u00eb pun\u00eb mjaft komplekse.<\/p>\n<h3>Kuota dhe kufizime<\/h3>\n<p>\nN\u00eb Java 11 p\u00ebrfshihet mb\u00ebshtetje p\u00ebr kuotat CPU (si PreferContainerQuotaForCPUCount). Kubernetes gjithashtu ofron mb\u00ebshtetje p\u00ebr kufizimet dhe kuotat. Po, gjith\u00e7ka ka kuptim, por, n\u00ebse aplikacioni p\u00ebrs\u00ebri kalon kufirin e ndar\u00eb, ne p\u00ebrs\u00ebri arrijm\u00eb n\u00eb pik\u00ebn ku madh\u00ebsia \u2013 ashtu si n\u00eb rastin e aplikacioneve tradicionale Java \u2013 p\u00ebrcaktohet nga numri i b\u00ebrthamave dhe ndarja e nj\u00eb thread-i p\u00ebr \u00e7do k\u00ebrkes\u00eb, do t\u00eb thot\u00eb se ka pak p\u00ebrfitim nga gjith\u00e7ka kjo.<br \/>\nP\u00ebr m\u00eb tep\u00ebr, n\u00ebse p\u00ebrdoren kuotat dhe kufizimet ose funksionet e shkall\u00ebzimit horizontale (scale-out) t\u00eb platform\u00ebs pas Kubernetes, problemi nuk zgjidhet automatikisht. Ne thjesht shpenzojm\u00eb m\u00eb shum\u00eb burime p\u00ebr t\u00eb zgjidhur problemin fillestar ose p\u00ebrfundojm\u00eb me nj\u00eb mbivendosje burimi. Dhe n\u00ebse kjo \u00ebsht\u00eb nj\u00eb sistem me ngarkes\u00eb t\u00eb lart\u00eb n\u00eb nj\u00eb cloud publik t\u00eb hapur, pothuajse me siguri fillojm\u00eb t\u00eb p\u00ebrdorim m\u00eb shum\u00eb burime se sa realisht jan\u00eb t\u00eb nevojshme.<\/p>\n<h3>Dhe \u00e7far\u00eb duhet t\u00eb b\u00ebjm\u00eb me gjith\u00eb k\u00ebt\u00eb?<\/h3>\n<p>\nN\u00ebse flasim thjesht, duhet t\u00eb p\u00ebrdorim biblioteka dhe framework-e asinkrone dhe jo-bllokuese, si 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> ose Akka. Ato jan\u00eb shum\u00eb m\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr pun\u00eb n\u00eb kontejner\u00eb p\u00ebr shkak t\u00eb natyr\u00ebs s\u00eb tyre reaktive. Fal\u00eb hyrjes-nxjerrjes jo-bllokuese, nj\u00eb rrjedh\u00eb e nj\u00ebjt\u00eb mund t\u00eb trajtoj\u00eb disa k\u00ebrkesa n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb. Nd\u00ebrsa nj\u00eb k\u00ebrkes\u00eb pret rezultatet e hyrjes-nxjerrjes, rrjedha q\u00eb e trajton at\u00eb lirohet dhe zajmilihet me nj\u00eb k\u00ebrkes\u00eb tjet\u00ebr. Kur rezultatet e hyrjes-nxjerrjes p\u00ebrfundojn\u00eb, p\u00ebrpunimi i k\u00ebrkes\u00ebs s\u00eb par\u00eb vazhdon. Duke alternuar p\u00ebrpunimin e k\u00ebrkesave brenda s\u00eb nj\u00ebjt\u00ebs rrjedh\u00eb, mund t\u00eb zvog\u00eblojm\u00eb numrin e p\u00ebrgjithsh\u00ebm t\u00eb rrjedhave dhe t\u00eb ulim shpenzimet e burimeve p\u00ebr p\u00ebrpunimin e k\u00ebrkesave.<\/p>\n<p>Me hyrjen-nxjerrjen jo-bllokuese, numri i b\u00ebrthamave b\u00ebhet nj\u00eb paramet\u00ebr ky\u00e7, pasi ai p\u00ebrcakton numrin e rrjedhave t\u00eb hyrjes-nxjerrjes q\u00eb mund t\u00eb ekzekutohen paralelisht. Me p\u00ebrdorimin e duhur, kjo lejon shp\u00ebrndarjen efikase t\u00eb ngarkes\u00ebs midis b\u00ebrthamave dhe p\u00ebrballimin e ngarkesave m\u00eb t\u00eb larta me burime m\u00eb t\u00eb vogla.<\/p>\n<h3>Si, \u00ebsht\u00eb kjo e gjitha?<\/h3>\n<p>\nJo, ka ende di\u00e7ka tjet\u00ebr. Programimi reaktiv ndihmon n\u00eb p\u00ebrdorimin m\u00eb t\u00eb mir\u00eb t\u00eb burimeve, por gjithashtu ka nj\u00eb \u00e7mim t\u00eb tij. N\u00eb ve\u00e7anti, kodi do t\u00eb duhet t\u00eb riprogramohet sipas parimeve t\u00eb jo-bllokimit dhe t\u00eb shmanget bllokimi i rrjedhave t\u00eb hyrjes-nxjerrjes. Dhe kjo \u00ebsht\u00eb nj\u00eb model krejt\u00ebsisht tjet\u00ebr zhvillimi dhe ekzekutimi. Edhe pse ka shum\u00eb biblioteka t\u00eb dobishme k\u00ebtu, kjo megjithat\u00eb \u00ebsht\u00eb nj\u00eb ndryshim radikal n\u00eb m\u00ebnyr\u00ebn e zakonshme t\u00eb mendimit.<\/p>\n<p>S\u00eb pari, duhet t\u00eb m\u00ebsoni t\u00eb shkruani kod q\u00eb ekzekutohet asinkronisht. Sapo t\u00eb filloni t\u00eb p\u00ebrdorni input-output t\u00eb papenguar, do t'ju duhet t\u00eb shkruani qart\u00eb se \u00e7far\u00eb do t\u00eb ndodh\u00eb kur t\u00eb merrni nj\u00eb p\u00ebrgjigje p\u00ebr k\u00ebrkes\u00ebn tuaj. Thjesht t\u00eb bllokoni dhe t\u00eb prisni nuk do t\u00eb funksionoj\u00eb m\u00eb. N\u00eb vend t\u00eb k\u00ebsaj, mund t\u00eb kaloni n\u00eb funksione kthimi, t\u00eb p\u00ebrdorni programimin reaktiv ose vazhdim. Por kjo nuk \u00ebsht\u00eb gjith\u00e7ka: p\u00ebr t\u00eb p\u00ebrdorur input-output t\u00eb papenguar, ju nevojiten edhe server\u00eb dhe klient\u00eb t\u00eb papenguar, dhe sa m\u00eb shum\u00eb q\u00eb t\u00eb mundeni. N\u00eb rastin e HTTP-s\u00eb, gjith\u00e7ka \u00ebsht\u00eb e thjesht\u00eb, por ka gjithashtu edhe DB dhe sisteme skedash, dhe shum\u00eb m\u00eb tep\u00ebr.<\/p>\n<p>Dhe megjith\u00ebse reaktiviteti total ofron maksimumin e efikasitetit, kjo kalim mund t\u00eb jet\u00eb e v\u00ebshtir\u00eb p\u00ebr t'u p\u00ebrthithur n\u00eb praktik\u00eb. Prandaj, mund\u00ebsia p\u00ebr t\u00eb kombinuar kodin reaktiv dhe imperativ b\u00ebhet nj\u00eb kusht i nevojsh\u00ebm p\u00ebr t\u00eb:<\/p>\n<ol>\n<li>P\u00ebrdorur efektivisht burimet n\u00eb drejtimet m\u00eb t\u00eb ngarkuara t\u00eb sistemit programor;<\/li>\n<li>P\u00ebrdorur nj\u00eb kod m\u00eb t\u00eb thjesht\u00eb n\u00eb stil n\u00eb pjes\u00ebt e tjera t\u00eb tij.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Prezantimi i Quarkus<\/h3>\n<p>\nN\u00eb thelb, kjo \u00ebsht\u00eb ajo q\u00eb p\u00ebrfaq\u00ebson Quarkus - t\u00eb kombinoj\u00eb modelet reaktive dhe imperative brenda nj\u00eb mjedisi ekzekutiv.<\/p>\n<p>N\u00eb themel t\u00eb Quarkus q\u00ebndrojn\u00eb Vert.x dhe Netty, mbi t\u00eb cilat p\u00ebrdoren nj\u00eb s\u00ebr\u00eb framework\u00ebsh dhe zgjerimesh reaktive, t\u00eb destinuara p\u00ebr t\u00eb ndihmuar zhvilluesin. Quarkus \u00ebsht\u00eb projektuar p\u00ebr t\u00eb nd\u00ebrtuar jo vet\u00ebm mikrosh\u00ebrbime HTTP, por edhe arkitektura t\u00eb menaxhuara nga ngjarjet. Fal\u00eb natyr\u00ebs s\u00eb tij reaktive, ai punon shum\u00eb efektivisht me sistemet e shk\u00ebmbimit t\u00eb mesazheve (Apache Kafka, AMQP etj).<\/p>\n<p>E gjith\u00eb hileja q\u00ebndron n\u00eb m\u00ebnyr\u00ebn si t\u00eb p\u00ebrdorni t\u00eb nj\u00ebjtin motor reaktiv si p\u00ebr kodin imperativ, ashtu edhe p\u00ebr at\u00eb reaktiv.<\/p>\n<p><img decoding=\"async\" alt=\"Si Quarkus kombinon programimin imperativ dhe reaktiv\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus e menaxhon me sukses. Zgjedhja midis programimit imperativ dhe reaktiv \u00ebsht\u00eb e dukshme \u2013 p\u00ebrdorimi i themelit reaktiv p\u00ebr t\u00eb dyja. Dhe ajo q\u00eb ndihmon shum\u00eb \u00ebsht\u00eb kodi i shpejt\u00eb jo-bllokues, i cili trajton pothuajse gjith\u00e7ka q\u00eb kalon p\u00ebrmes ciklit t\u00eb ngjarjeve (event-loop thread, gjithashtu \u2013 IO thread). Por n\u00ebse keni aplikacione klasike REST ose aplikacione an\u00ebsore t\u00eb klientit, Quarkus ka n\u00eb dispozicion nj\u00eb model imperativ programimi. P\u00ebr shembull, mb\u00ebshtetje HTTP n\u00eb Quarkus ndalon nga p\u00ebrdorimi i motorit t\u00eb reaktiv dhe jo-bllokues (Eclipse Vert.x dhe Netty). T\u00eb gjitha k\u00ebrkesat HTTP q\u00eb merr aplikacioni juaj kalojn\u00eb fillimisht p\u00ebrmes ciklit t\u00eb ngjarjeve (IO Thread), dhe m\u00eb pas d\u00ebrgohen n\u00eb at\u00eb pjes\u00eb t\u00eb kodit q\u00eb menaxhon k\u00ebrkesat. N\u00eb var\u00ebsi t\u00eb destinacionit, kodi i menaxhimit t\u00eb k\u00ebrkesave mund t\u00eb thirret brenda nj\u00eb thread t\u00eb ve\u00e7ant\u00eb (i njohur si worker thread, i p\u00ebrdorur n\u00eb rastet e servleteve dhe Jax-RS) ose t\u00eb p\u00ebrdor\u00eb thread-in origjinal t\u00eb hyrjes dhe daljes (rrug\u00eb reaktive reactive route).<\/p>\n<p><img decoding=\"async\" alt=\"Si Quarkus kombinon programimin imperativ dhe reaktiv\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>P\u00ebr konektor\u00ebt e sistemeve t\u00eb transferimit t\u00eb mesazheve p\u00ebrdoren klient\u00eb jo-bllokues q\u00eb punojn\u00eb mbi motorin Vert.x. Prandaj mund ta d\u00ebrgoni, merrni dhe trajtoni mesazhe n\u00eb m\u00ebnyr\u00eb efikase nga sistemet e klas\u00ebs messaging middleware.<\/p>\n<p>N\u00eb faqen ton\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> jan\u00eb mbledhur disa udh\u00ebzime t\u00eb mira q\u00eb do t'ju ndihmojn\u00eb t\u00eb filloni pun\u00ebn me Quarkus:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">P\u00ebrdorimi i Rrug\u00ebve Reaktive<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Klient\u00eb SQL Reaktiv\u00eb<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">P\u00ebrdorimi i Apache Kafka me Mesazhe Reaktive<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">P\u00ebrdorimi i AMQP me Mesazhe Reaktive<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">P\u00ebrdorimi i API-s\u00eb Vertx<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nP\u00ebr m\u00eb tep\u00ebr, ne kemi p\u00ebrgatitur m\u00ebsime praktike online p\u00ebr t'u njohur me aspekte t\u00eb ndryshme t\u00eb programimit reaktiv, dhe p\u00ebr t'i ndjekur mjafton vet\u00ebm nj\u00eb shfletues, aspak nuk k\u00ebrkohet IDE, as kompiuter. Mund t'i gjeni k\u00ebto m\u00ebsime <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">k\u00ebtu<\/a><\/noindex>.<\/p>\n<h3>Burime t\u00eb dobishme<\/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 arsye p\u00ebr t\u00eb provuar Quarkus<\/a><\/noindex><\/li>\n<li>Faqja e projektit Quarkus \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Projekti Quarkus n\u00eb GitHub \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Twitteri i projektit Quarkus \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Chat-i i projektit Quarkus \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Forumet e projektit Quarkus jan\u00eb <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-m\u00ebsime p\u00ebr Quarkus, p\u00ebr tu njohur me tem\u00ebn<\/h3>\n<p>\nSi\u00e7 shkruhet n\u00eb faqen e internetit <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> kanal logjik <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-nj\u00eb stack Java i orientuar, i optimizuar p\u00ebr GraalVM dhe OpenJDK HotSpot, i nd\u00ebrtuar nga bibliotekat dhe standardet m\u00eb t\u00eb mira t\u00eb Java.<\/p>\n<p>P\u00ebr t'ju ndihmuar t\u00eb kuptoni tem\u00ebn, ne kemi p\u00ebrzgjedhur 10 video-m\u00ebsime q\u00eb trajtojn\u00eb aspekte t\u00eb ndryshme t\u00eb Quarkus dhe shembuj t\u00eb p\u00ebrdorimit t\u00eb tij:<\/p>\n<h4>1. Paraqitja e Quarkus: nj\u00eb cad\u00ebr Java t\u00eb brezit t\u00eb ri p\u00ebr Kubernetes<\/h4>\n<p>\nAutor\u00ebt: Thomas Qvarnstrom dhe Jason Greene<br \/>\nQ\u00ebllimi i projektit Quarkus \u00ebsht\u00eb t\u00eb krijoj\u00eb nj\u00eb platform\u00eb Java p\u00ebr Kubernetes dhe mjedise serverless, duke kombinuar modelet reaktive dhe imperative t\u00eb programimit brenda nj\u00eb mjedisi p\u00ebrfundimtar, q\u00eb zhvilluesit t\u00eb ken\u00eb mund\u00ebsi t\u00eb ndryshojn\u00eb fleksib\u00ebl qasjen duke punuar me nj\u00eb gam\u00eb t\u00eb gj\u00ebr\u00eb arkitekturash t\u00eb shp\u00ebrndara t\u00eb aplikacioneve. M\u00ebsoni m\u00eb shum\u00eb nga ligj\u00ebrata hyr\u00ebse m\u00eb posht\u00eb.<\/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=\"Luaj videon\" 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: Java subatome e super shpejt\u00eb<\/h4>\n<p>\nAutor: Burr Sutter<br \/>\nNj\u00eb video m\u00ebsimore nga internet-lectoria DevNation Live tregon se si t\u00eb p\u00ebrdorni Quarkus p\u00ebr optimizimin e aplikacioneve Java, API-ve, mikrosherbimeve dhe funksioneve serverless n\u00eb mjedisin Kubernetes\/OpenShift, duke i b\u00ebr\u00eb ato shum\u00eb m\u00eb t\u00eb vogla, m\u00eb t\u00eb shpejta dhe m\u00eb t\u00eb shkall\u00ebzueshme.<\/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=\"Luaj videon\" 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 dhe GraalVM: Shtyjm\u00eb Hibernate deri n\u00eb shpejt\u00ebsi super dhe e ngjeshim deri n\u00eb p\u00ebrmasa subatome<\/h4>\n<p>\nAutor: Sanne Grinovero<br \/>\nNga prezantimi do t\u00eb m\u00ebsoni se si u shfaq Quarkus, si funksionon dhe si lejon q\u00eb biblioteka komplekse, si Hibernate ORM, t\u00eb jen\u00eb t\u00eb pajtueshme me imazhet native t\u00eb 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=\"Luaj videon\" 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. T\u00eb m\u00ebsojm\u00eb t\u00eb zhvillojm\u00eb aplikacione serverless<\/h4>\n<p>\nAutor: Marthen Luther<br \/>\nN\u00eb videon m\u00eb posht\u00eb tregohet se si t\u00eb krijoni nj\u00eb aplikacion t\u00eb thjesht\u00eb Java me ndihm\u00ebn e Quarkus dhe ta \u00e7oni at\u00eb si nj\u00eb aplikacion serverless n\u00eb 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=\"Luaj videon\" 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: Kodoni me k\u00ebnaq\u00ebsi<\/h4>\n<p>\nAutor: Edson Yanaga<br \/>\nNj\u00eb udh\u00ebzues video p\u00ebr krijimin e projektit tuaj t\u00eb par\u00eb Quarkus, duke e b\u00ebr\u00eb t\u00eb kuptoni pse Quarkus po fiton zemrat e zhvilluesve.<\/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=\"Luaj videon\" 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 dhe kontejner\u00ebt \u2013 \u00e7far\u00eb do t\u00eb jet\u00eb e ardhmja e tyre s\u00eb bashku<\/h4>\n<p>\nAutor: Mark Little<br \/>\nKy prezantim paraqet historin\u00eb e Java dhe shpjegon pse Quarkus \u00ebsht\u00eb e ardhmja e Java.<\/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=\"Luaj videon\" 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: Java subatome e super shpejt\u00eb<\/h4>\n<p>\nAutor: Dimitris Andreadis<br \/>\nNj\u00eb p\u00ebrmbledhje e avantazheve t\u00eb Quarkus q\u00eb jan\u00eb njohur nga zhvilluesit: thjesht\u00ebsia, shpejt\u00ebsit\u00eb super t\u00eb larta, bibliotekat m\u00eb t\u00eb mira dhe standardet.<\/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=\"Luaj videon\" 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 dhe sistemet reaktive subatome<\/h4>\n<p>\nAutor: Clement Escoffier<br \/>\nMe ndihm\u00ebn e integrimit me GraalVM, Quarkus ofron nj\u00eb p\u00ebrvoj\u00eb zhvillimi super t\u00eb shpejt\u00eb dhe nj\u00eb mjedis ekzekutiv subatom. Autori flet p\u00ebr an\u00ebn reaktive t\u00eb Quarkus dhe se si ta p\u00ebrdor\u00eb at\u00eb p\u00ebr nd\u00ebrtimin e aplikacioneve reaktive dhe aplikacioneve me transmetim t\u00eb t\u00eb dh\u00ebnave.<\/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=\"Luaj videon\" 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 dhe zhvillimi i shpejt\u00eb i aplikacioneve n\u00eb Eclipse MicroProfile<\/h4>\n<p>\nAutor: John Clingan<br \/>\nDuke bashk\u00eb Eclipse MicroProfile dhe Quarkus, zhvilluesit mund t\u00eb krijojn\u00eb aplikacione komplekse t\u00eb kontejnerizuar MicroProfile q\u00eb ekzekutojn\u00eb brenda disa dhjetra milisekondash. Videon e mbulon n\u00eb detaje se si t\u00eb kodoni nj\u00eb aplikacion kontejner MicroProfile p\u00ebr deployment n\u00eb platform\u00ebn 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=\"Luaj videon\" 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, versioni \"Turbo\"<\/h4>\n<p>\nAutori: Markus Biel<br \/>\nAutori tregon se si t\u00eb p\u00ebrdorni Quarkus p\u00ebr t\u00eb krijuar kontejner\u00eb Java shum\u00eb t\u00eb vegj\u00ebl dhe shum\u00eb t\u00eb shpejt\u00eb, duke mund\u00ebsuar nj\u00eb avancim t\u00eb v\u00ebrtet\u00eb, sidomos n\u00eb mjediset serverless.<\/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=\"Luaj videon\" 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 \/>Burimi: <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.2 - 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\/sq\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\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\/sq\/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\udd47 Si bashkon Quarkus programimin imperativ dhe reaktiv | ProHoster","description":"K\u00ebt\u00eb vit kemi n\u00eb plan t\u00eb zhvillojm\u00eb seriozisht temat e kontejner\u00ebve, Cloud-Native Java dhe","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}