{"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\/sv\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Hur Quarkus f\u00f6renar imperativ och reaktiv programmering","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I \u00e5r planerar vi att p\u00e5 allvar utveckla \u00e4mnena kring containrar, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Cloud-Native Java<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. En logisk forts\u00e4ttning p\u00e5 dessa \u00e4mnen blir att ber\u00e4tta om ramverket Quarkus, som redan <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">diskuterats<\/a><\/noindex> p\u00e5 Habr\u00e9. Dagens artikel handlar inte s\u00e5 mycket om strukturen av \"subatom\u00e4r superhj\u00e4lpsam Java\", utan om de m\u00f6jligheter som Quarkus f\u00f6r med sig i f\u00f6retagssammanhang.<\/p>\n<p><img decoding=\"async\" alt=\"Hur Quarkus f\u00f6renar imperativ och reaktiv programmering\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava och JVM \u00e4r fortfarande extremt popul\u00e4ra, men vid arbete med serverl\u00f6sa teknologier och molnorienterade mikrotj\u00e4nster anv\u00e4nds Java och andra spr\u00e5k f\u00f6r JVM alltmer s\u00e4llan, eftersom de tar f\u00f6r mycket minne och har f\u00f6r l\u00e5ng laddningstid, vilket g\u00f6r dem mindre l\u00e4mpliga f\u00f6r kortlivade containrar. Lyckligtvis b\u00f6rjar denna situation f\u00f6r\u00e4ndras tack vare Quarkus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Subatom\u00e4r superhj\u00e4lpsam Java har n\u00e5tt en ny niv\u00e5!<\/h3>\n<p>\n42 versioner, 8 m\u00e5naders arbete fr\u00e5n gemenskapen och 177 fantastiska utvecklare \u2013 resultatet av allt detta blev lanseringen av <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, en release som markerar en viktig milep\u00e6l i projektets utveckling och erbjuder en massa coola funktioner och m\u00f6jligheter (mer om dem kan l\u00e4sas i <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">annonsen<\/a><\/noindex>).<\/p>\n<p>Idag kommer vi att ber\u00e4tta hur Quarkus f\u00f6renar modeller av imperativ och reaktiv programmering baserat p\u00e5 en enhetlig reaktiv k\u00e4rna. Vi b\u00f6rjar med en kort tillbakablick p\u00e5 historien och g\u00e5r sedan igenom i detalj vad dualiteten hos Quarks reaktiva k\u00e4rna inneb\u00e4r och hur <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>-utvecklare kan dra nytta av dessa f\u00f6rdelar.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Mikrotj\u00e4nster<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">med h\u00e4ndelsestyrd arkitektur<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">serverl\u00f6sa<\/a><\/noindex>-funktioner \u2013 allt detta \u00e4r idag, som man s\u00e4ger, p\u00e5 uppg\u00e5ng. P\u00e5 senare tid har skapandet av molnorienterade arkitekturer blivit mycket enklare och mer tillg\u00e4ngligt, men problemen kvarst\u00e5r \u2013 s\u00e4rskilt f\u00f6r Java-utvecklare. Till exempel, n\u00e4r det g\u00e4ller serverl\u00f6sa funktioner och mikrotj\u00e4nster finns det ett akut behov av att minska starttiden, minska minnesanv\u00e4ndningen och g\u00f6ra deras utveckling mer praktisk och trevlig. Java har under de senaste \u00e5ren gjort flera f\u00f6rb\u00e4ttringar, s\u00e5som f\u00f6rb\u00e4ttrad ergonomik f\u00f6r containrar och s\u00e5 vidare. Men det \u00e4r fortfarande inte l\u00e4tt att f\u00e5 Java att fungera normalt i en container. D\u00e4rf\u00f6r b\u00f6rjar vi med att titta p\u00e5 n\u00e5gra av de interna sv\u00e5righeterna med Java, som s\u00e4rskilt tydligt uppst\u00e5r vid utveckling av containerorienterade Java-applikationer.<\/p>\n<p>L\u00e5t oss b\u00f6rja med historien.<\/p>\n<p><img decoding=\"async\" alt=\"Hur Quarkus f\u00f6renar imperativ och reaktiv programmering\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Str\u00f6mmar och beh\u00e5llare<\/h3>\n<p>\nFr\u00e5n och med version 8u131 har Java mer eller mindre b\u00f6rjat st\u00f6dja beh\u00e5llare genom f\u00f6rb\u00e4ttringar i ergonomifunktionaliteten. Specifikt vet JVM nu hur m\u00e5nga processork\u00e4rnor den k\u00f6rs p\u00e5 och kan d\u00e4rmed anpassa tr\u00e5dpoolerna \u2013 vanligtvis fork\/join-pooler. Det \u00e4r s\u00e4kert bra, men anta att vi har en traditionell webbapplikation som anv\u00e4nder HTTP-servlets och k\u00f6rs i Tomcat, Jetty och liknande. Som ett resultat kommer denna applikation att tilldela en separat tr\u00e5d f\u00f6r varje beg\u00e4ran och l\u00e5ta den blockera denna tr\u00e5d medan den v\u00e4ntar p\u00e5 in- och utoperationer, till exempel vid \u00e5tkomst till databaser, filer eller andra tj\u00e4nster. Det inneb\u00e4r att storleken p\u00e5 en s\u00e5dan applikation beror inte p\u00e5 antalet tillg\u00e4ngliga k\u00e4rnor utan p\u00e5 antal samtidiga beg\u00e4rningar. Dessutom betyder detta att kvoter eller gr\u00e4nser i Kubernetes f\u00f6r antalet k\u00e4rnor knappt kommer att hj\u00e4lpa, och i slut\u00e4ndan kommer det att sluta med d\u00e4mpning.<\/p>\n<h3>Minnesutarmning<\/h3>\n<p>\nTr\u00e5dar \u00e4r minne. Och interna beh\u00e5llarbegr\u00e4nsningar f\u00f6r minne \u00e4r l\u00e5ngt ifr\u00e5n en universal l\u00f6sning. B\u00f6rja bara \u00f6ka antalet applikationer och tr\u00e5dar, och f\u00f6rr eller senare kommer du att st\u00f6ta p\u00e5 en kritisk \u00f6kning av v\u00e4xelfrekvensen och d\u00e4rmed en nedg\u00e5ng i prestanda. Dessutom, om applikationen anv\u00e4nder traditionella mikrotj\u00e4nstarkitekturer eller ansluter till databaser, eller anv\u00e4nder caching, eller p\u00e5 n\u00e5got annat s\u00e4tt ytterligare f\u00f6rbrukar minne, beh\u00f6ver du uppenbarligen ett verktyg som l\u00e5ter dig titta in i JVM och se hur den hanterar minnet utan att skada sj\u00e4lva JVM (till exempel XX:+UseCGroupMemoryLimitForHeap). \u00c4ven om JVM fr\u00e5n och med Java 9 har l\u00e4rt sig att ta h\u00e4nsyn till cgroups och anpassa sig d\u00e4refter, \u00e4r minnesreservation och hantering fortfarande en ganska komplicerad sak.<\/p>\n<h3>Kvoter och gr\u00e4nser<\/h3>\n<p>\nJava 11 introducerade st\u00f6d f\u00f6r CPU-kvoter (som PreferContainerQuotaForCPUCount). Kubernetes erbjuder ocks\u00e5 st\u00f6d f\u00f6r gr\u00e4nser och kvoter. Ja, allt detta ger mening, men om applikationen igen \u00f6verskrider den tilldelade kvoten, \u00e5terkommer vi till att storleken \u2013 som i fallet med traditionella Java-applikationer \u2013 best\u00e4ms av antalet k\u00e4rnor och tilldelning av en separat tr\u00e5d f\u00f6r varje beg\u00e4ran, vilket inneb\u00e4r att det inte \u00e4r mycket vits med allt detta.<br \/>\nDessutom, om vi anv\u00e4nder kvoter och gr\u00e4nser eller funktioner f\u00f6r horisontell (scale-out) skalning av plattformen som ligger bakom Kubernetes, l\u00f6ser inte problemet sig sj\u00e4lvt. Vi sl\u00f6sar bara mer resurser p\u00e5 att l\u00f6sa det ursprungliga problemet, eller i slut\u00e4ndan kommer vi att hamna i en situation med resurssl\u00f6seri. Och om detta \u00e4r ett h\u00f6gbelastat system i en offentlig molntj\u00e4nst, b\u00f6rjar vi n\u00e4stan s\u00e4kert anv\u00e4nda mer resurser \u00e4n vad som verkligen beh\u00f6vs.<\/p>\n<h3>Vad ska man g\u00f6ra med allt detta?<\/h3>\n<p>\nEnkelt sagt, anv\u00e4nd asynkrona och icke-blockerande bibliotek f\u00f6r in- och utdata samt ramverk som 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> eller Akka. De \u00e4r mycket b\u00e4ttre anpassade f\u00f6r att fungera i containrar p\u00e5 grund av sin reaktiva natur. Tack vare icke-blockerande in- och utdata kan samma tr\u00e5d hantera flera samtidiga f\u00f6rfr\u00e5gningar. Medan en f\u00f6rfr\u00e5gan v\u00e4ntar p\u00e5 in- och utdataresultat, frig\u00f6rs den tr\u00e5d som behandlar den och kan ta sig an en annan f\u00f6rfr\u00e5gan. Och n\u00e4r resultaten av in- och utdata slutligen kommer in forts\u00e4tter bearbetningen av den f\u00f6rsta f\u00f6rfr\u00e5gan. Genom att v\u00e4xla mellan att bearbeta f\u00f6rfr\u00e5gningar inom samma tr\u00e5d kan vi minska det totala antalet tr\u00e5dar och minska resursanv\u00e4ndningen vid bearbetning av f\u00f6rfr\u00e5gningar.<\/p>\n<p>Vid icke-blockerande in- och utdata blir antalet k\u00e4rnor en nyckelparameter, eftersom det definierar hur m\u00e5nga in- och utdata-tr\u00e5dar som kan utf\u00f6ras parallellt. Vid korrekt anv\u00e4ndning m\u00f6jligg\u00f6r detta en effektiv belastningsf\u00f6rdelning mellan k\u00e4rnorna och att hantera h\u00f6gre belastningar med f\u00e4rre resurser.<\/p>\n<h3>Och, \u00e4r det allt?<\/h3>\n<p>\nNej, det finns mer. Reaktiv programmering hj\u00e4lper till att b\u00e4ttre utnyttja resurser, men har ocks\u00e5 sin kostnad. Specifikt m\u00e5ste koden skrivas om enligt principerna f\u00f6r icke-blockerande och undvika blockering av in- och utdata-tr\u00e5dar. Och det \u00e4r en helt annan utvecklings- och exekveringsmodell. \u00c4ven om det finns m\u00e5nga anv\u00e4ndbara bibliotek h\u00e4r, \u00e4r det \u00e4nd\u00e5 en radikal f\u00f6r\u00e4ndring av det vanliga s\u00e4ttet att t\u00e4nka.<\/p>\n<p>F\u00f6r det f\u00f6rsta m\u00e5ste du l\u00e4ra dig att skriva kod som k\u00f6rs asynkront. S\u00e5 snart du b\u00f6rjar anv\u00e4nda icke-blockerande in- och utdata m\u00e5ste du tydligt ange vad som ska h\u00e4nda n\u00e4r svaret p\u00e5 en f\u00f6rfr\u00e5gan kommer in. Att bara blockera och v\u00e4nta g\u00e5r inte l\u00e4ngre. Ist\u00e4llet kan du skicka tillbaka samtal, anv\u00e4nda reaktiv programmering eller continuation. Men det \u00e4r inte allt: f\u00f6r att anv\u00e4nda icke-blockerande in- och utdata beh\u00f6ver du \u00e4ven icke-blockerande servrar och klienter, helst \u00f6verallt. F\u00f6r HTTP \u00e4r det enkelt, men det finns ocks\u00e5 databaser, filsystem och mycket mer.<\/p>\n<p>Och \u00e4ven om total genomg\u00e5ende reaktivitet ger maximal effektivitet kan en s\u00e5dan f\u00f6r\u00e4ndring vara sv\u00e5r att sm\u00e4lta i praktiken. D\u00e4rf\u00f6r blir m\u00f6jligheten att kombinera reaktiv och imperativ kod ett n\u00f6dv\u00e4ndigt villkor f\u00f6r att:<\/p>\n<ol>\n<li>Effektivt anv\u00e4nda resurser p\u00e5 de mest belastade delarna av det programvarusystemet;<\/li>\n<li>Anv\u00e4nda enklare kodstil i de andra delarna.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Vi presenterar Quarkus<\/h3>\n<p>\nDet \u00e4r egentligen inneb\u00f6rden av Quarkus \u2013 att f\u00f6rena reaktiva och imperativa modeller inom en och samma k\u00f6rmilj\u00f6.<\/p>\n<p>K\u00e4rnan i Quarkus bygger p\u00e5 Vert.x och Netty, ovanp\u00e5 vilka ett antal reaktiva ramverk och till\u00e4gg anv\u00e4nds f\u00f6r att hj\u00e4lpa utvecklaren. Quarkus \u00e4r avsedd f\u00f6r att bygga inte bara HTTP-mikrotj\u00e4nster, utan \u00e4ven h\u00e4ndelsehanterade arkitekturer. Tack vare sin reaktiva natur fungerar den mycket effektivt med meddelandesystem (Apache Kafka, AMQP etc.).<\/p>\n<p>Hela tricket ligger i hur man anv\u00e4nder samma reaktiva motor f\u00f6r b\u00e5de imperativ och reaktiv kod.<\/p>\n<p><img decoding=\"async\" alt=\"Hur Quarkus f\u00f6renar imperativ och reaktiv programmering\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus hanterar detta utm\u00e4rkt. Valet mellan imperativ och reaktiv \u00e4r tydligt \u2013 anv\u00e4nd det reaktiva k\u00e4rnan f\u00f6r b\u00e5da. Det hj\u00e4lper enormt med snabb, icke-blockerande kod som hanterar n\u00e4stan allt som passerar genom h\u00e4ndelse-loopens tr\u00e5d (event-loop thread, \u00e4ven k\u00e4nd som IO-thread). Men om du har klassiska REST-appar eller klientbaserade applikationer st\u00e5r Quarkus redo med en imperativ programmeringsmodell. Till exempel byggs HTTP-st\u00f6det i Quarkus p\u00e5 anv\u00e4ndningen av en icke-blockerande och reaktiv motor (Eclipse Vert.x och Netty). Alla HTTP-f\u00f6rfr\u00e5gningar som mottas av din applikation passerar f\u00f6rst genom h\u00e4ndelse-loopen (IO Thread) och skickas sedan till den del av koden som hanterar f\u00f6rfr\u00e5gningar. Beroende p\u00e5 destination kan koden f\u00f6r hantering av f\u00f6rfr\u00e5gningar k\u00f6ras i en separat tr\u00e5d (den s\u00e5 kallade worker thread, anv\u00e4nds f\u00f6r servlets och Jax-RS) eller anv\u00e4nda den ursprungliga in- och utstr\u00f6mmen (reaktiv rutt).<\/p>\n<p><img decoding=\"async\" alt=\"Hur Quarkus f\u00f6renar imperativ och reaktiv programmering\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>F\u00f6r meddelande\u00f6verf\u00f6ringssystemens kopplingar anv\u00e4nds icke-blockerande klienter som arbetar ovanp\u00e5 Vert.x-motorn. D\u00e4rf\u00f6r kan du effektivt skicka, ta emot och bearbeta meddelanden fr\u00e5n meddelandemiddleware-system.<\/p>\n<p>P\u00e5 webbplatsen <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> ett antal bra guider har sammanst\u00e4llts f\u00f6r att hj\u00e4lpa dig att komma ig\u00e5ng med Quarkus:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Anv\u00e4nda reaktiva rutter<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Reaktiva SQL-klienter<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Anv\u00e4nda Apache Kafka med reaktiv meddelandehantering<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">Anv\u00e4nda AMQP med reaktiv meddelandehantering<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Anv\u00e4nda Vertx API<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nDessutom har vi f\u00f6rberett online praktiska lektioner f\u00f6r att bekanta dig med olika aspekter av reaktiv programmering, f\u00f6r att genomf\u00f6ra dem beh\u00f6vs bara en webbl\u00e4sare, ingen IDE kr\u00e4vs och datorn \u00e4r inte n\u00f6dv\u00e4ndig. Du kan hitta dessa lektioner <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">h\u00e4r<\/a><\/noindex>.<\/p>\n<h3>Nyttiga resurser<\/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 anledningar att prova Quarkus<\/a><\/noindex><\/li>\n<li>Quarkus-projektets webbplats \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Quarkus-projektet p\u00e5 GitHub \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Quarkus-projektets Twitter \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Quarkus-projektets chatt \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Quarkus-projektets forum \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 videolektioner om Quarkus f\u00f6r att f\u00f6rst\u00e5 \u00e4mnet<\/h3>\n<p>\nSom n\u00e4mns p\u00e5 webbplatsen <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> en logisk kanal <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-orienterad Java-stack, skr\u00e4ddarsydd f\u00f6r GraalVM och OpenJDK HotSpot och byggd av de b\u00e4sta Java-biblioteken och standarderna.<\/p>\n<p>F\u00f6r att hj\u00e4lpa dig att f\u00f6rst\u00e5 \u00e4mnet har vi valt ut 10 videolektioner d\u00e4r olika aspekter av Quarkus och exempel p\u00e5 dess anv\u00e4ndning behandlas:<\/p>\n<h4>1. Introduktion till Quarkus: Java-ramverket f\u00f6r n\u00e4sta generation f\u00f6r Kubernetes<\/h4>\n<p>\nF\u00f6rfattare: Thomas Qvarnstrom och Jason Greene<br \/>\nM\u00e5let med Quarkus-projektet \u00e4r att skapa en Java-plattform f\u00f6r Kubernetes och serverless-milj\u00f6er, och att kombinera reaktiva och imperativa programmeringsmodeller inom en gemensam k\u00f6rmilj\u00f6, s\u00e5 att utvecklare kan variera sina angreppss\u00e4tt flexibelt n\u00e4r de arbetar med en bred upps\u00e4ttning distribuerade applikationsarkitekturer. L\u00e4r dig mer i den introducerande f\u00f6rel\u00e4sningen nedan.<\/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=\"Spela 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: super snabb subatom\u00e4r Java<\/h4>\n<p>\nF\u00f6rfattare: Burr Sutter<br \/>\nVideolektionen fr\u00e5n webbinarium DevNation Live visar hur man anv\u00e4nder Quarkus f\u00f6r att optimera f\u00f6retags Java-applikationer, API:er, mikrotj\u00e4nster och serverless-funktioner i Kubernetes\/OpenShift-milj\u00f6, vilket g\u00f6r dem mycket mindre, snabbare och mer skalbara.<\/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=\"Spela 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 och GraalVM: vi \u00f6verklockar Hibernate till superhastigheter och komprimerar till subatom\u00e4ra storlekar<\/h4>\n<p>\nF\u00f6rfattare: Sanne Grinovero<br \/>\nFr\u00e5n presentationen f\u00e5r du veta hur Quarkus uppstod, hur det fungerar och hur det g\u00f6r komplexa bibliotek som Hibernate ORM kompatibla med GraalVM-nativebilder.<\/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=\"Spela 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. L\u00e4r dig att utveckla serverless-applikationer<\/h4>\n<p>\nF\u00f6rfattare: Marthen Luther<br \/>\nI videon nedan visas hur man skapar en enkel Java-applikation med Quarkus och distribuerar den som en serverless-applikation p\u00e5 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=\"Spela 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: koda med gl\u00e4dje<\/h4>\n<p>\nF\u00f6rfattare: Edson Yanaga<br \/>\nVideoguide f\u00f6r att skapa ditt f\u00f6rsta Quarkus-projekt, som ger en f\u00f6rst\u00e5else f\u00f6r varf\u00f6r Quarkus vinner utvecklares hj\u00e4rtan.<\/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=\"Spela 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 och containrar \u2013 hur ser deras gemensamma framtid ut?<\/h4>\n<p>\nF\u00f6rfattare: Mark Little<br \/>\nDenna presentation ger en inblick i Java:s historia och f\u00f6rklarar varf\u00f6r Quarkus \u00e4r framtiden f\u00f6r 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=\"Spela 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: super snabb subatom\u00e4r Java<\/h4>\n<p>\nF\u00f6rfattare: Dimitris Andreadis<br \/>\n\u00d6versikt \u00f6ver f\u00f6rdelarna med Quarkus som har f\u00e5tt erk\u00e4nnande fr\u00e5n utvecklare: enkelhet, extremt h\u00f6g hastighet, b\u00e4sta bibliotek och standarder.<\/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=\"Spela 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 och subatom\u00e4ra reaktiva system<\/h4>\n<p>\nF\u00f6rfattare: Clement Escoffier<br \/>\nTack vare integrationen med GraalVM erbjuder Quarkus en supersnabb utvecklingsupplevelse och en subatom\u00e4r k\u00f6rmilj\u00f6. F\u00f6rfattaren talar om den reaktiva sidan av Quarkus och hur den anv\u00e4nds f\u00f6r att skapa reaktiva applikationer och applikationer med str\u00f6mmande data.<\/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=\"Spela 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 och snabb applikationsutveckling i Eclipse MicroProfile<\/h4>\n<p>\nF\u00f6rfattare: John Clingan<br \/>\nGenom att kombinera Eclipse MicroProfile och Quarkus kan utvecklare skapa fullt fungerande MicroProfile-containerapplikationer som startar p\u00e5 bara n\u00e5gra tiotal millisekunder. I videon g\u00e5r vi noggrant igenom hur man kodar en containerapplikation MicroProfile f\u00f6r distribution p\u00e5 Kubernetes-plattformen.<\/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=\"Spela 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, version \"Turbo\"<\/h4>\n<p>\nF\u00f6rfattare: Marcus Biel<br \/>\nF\u00f6rfattaren visar hur man anv\u00e4nder Quarkus f\u00f6r att skapa supersm\u00e5 och supersnabba Java-containrar, vilket m\u00f6jligg\u00f6r ett verkligt genombrott, s\u00e4rskilt i serverless-milj\u00f6er.<\/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=\"Spela 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 \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Hur Quarkus f\u00f6renar imperativ och reaktiv programmering | ProHoster","description":"I \u00e5r planerar vi att p\u00e5 allvar utveckla \u00e4mnen kring containrar, Cloud-Native Java och","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}