{"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\/de\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Wie Quarkus imperatives und reaktives Programmieren vereint","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In diesem Jahr planen wir, die Themen Container ernsthaft voranzutreiben, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Cloud-Native Java<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Eine logische Fortsetzung dieser Themen wird die Vorstellung des Frameworks Quarkus sein, das bereits <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">auf Habr\u00e9 behandelt wurde. Der heutige Artikel widmet sich nicht so sehr der Funktionsweise der \u201esubatomaren super schnellen Java\u201c, sondern den Perspektiven, die Quarkus in das Unternehmensumfeld einbringt.<\/a><\/noindex> Java und die JVM sind nach wie vor \u00e4u\u00dferst beliebt, aber bei der Arbeit mit serverlosen Technologien und cloud-orientierten Mikrodiensten werden Java und andere Sprachen f\u00fcr die JVM zunehmend seltener verwendet, da sie zu viel Speicherplatz beanspruchen und zu langsam laden, wodurch sie sich schlecht f\u00fcr den Einsatz mit kurzlebigen Containern eignen. Gl\u00fccklicherweise beginnt sich diese Situation dank Quarkus derzeit zu \u00e4ndern.<\/p>\n<p><img decoding=\"async\" alt=\"Wie Quarkus imperatives und reaktives Programmieren vereint\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie ultra-schnelle subatomare Java hat ein neues Niveau erreicht!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>42 Releases, 8 Monate Community-Arbeit und 177 erstaunliche Entwickler \u2013 das Ergebnis ist die Ver\u00f6ffentlichung von<\/h3>\n<p>\nQuarkus 1.0 <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">, einem Release, das einen wichtigen Meilenstein in der Entwicklung des Projekts darstellt und viele coole Funktionen und M\u00f6glichkeiten bietet (mehr dazu k\u00f6nnen Sie lesen in<\/a><\/noindex>Heute werden wir dar\u00fcber sprechen, wie Quarkus die Modelle imperativer und reaktiver Programmierung auf der Basis eines einheitlichen reaktiven Kerns kombiniert. Wir beginnen mit einem kurzen Ausflug in die Geschichte und besch\u00e4ftigen uns dann im Detail mit dem Dualismus des reaktiven Kerns von Quarkus und wie <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">der Ank\u00fcndigung<\/a><\/noindex>).<\/p>\n<p>-Entwickler diese Vorteile nutzen k\u00f6nnen. <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>Ereignisgesteuerte Architekturen von Mikrodiensten<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">serverless<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">-Funktionen \u2013 all dies ist heutzutage, wie man so sagt, im Aufwind. Seit kurzem ist es viel einfacher und zug\u00e4nglicher geworden, cloud-orientierte Architekturen zu erstellen, jedoch sind Probleme geblieben \u2013 insbesondere f\u00fcr Java-Entwickler. So besteht beispielsweise bei serverlosen Funktionen und Mikrodiensten ein akuter Bedarf, die Startzeit zu verk\u00fcrzen, den Speicherverbrauch zu senken und die Entwicklung angenehmer und komfortabler zu gestalten. In den letzten Jahren hat Java mehrere Verbesserungen hervorgebracht, wie z. B. ein \u00fcberarbeitetes Ergonomie-Feature f\u00fcr Container und mehr. Dennoch bleibt es schwierig, eine ordnungsgem\u00e4\u00dfe Funktionsweise von Java in einem Container zu erreichen. Deshalb beginnen wir mit einer Betrachtung einiger der internen Herausforderungen von Java, die besonders stark beim Entwickeln von containerorientierten Java-Anwendungen zutage treten.<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">-Funktionen \u2013 all das ist heute, sozusagen, im Aufstieg. In letzter Zeit ist die Erstellung cloud-orientierter Architekturen viel einfacher und zug\u00e4nglicher geworden, jedoch bestehen die Probleme fort \u2013 besonders f\u00fcr Java-Entwickler. Beispielsweise besteht bei serverlosen Funktionen und Mikrodiensten ein akuter Bedarf, die Startzeit zu verk\u00fcrzen, den Speicherverbrauch zu reduzieren und die Entwicklung angenehmer und benutzerfreundlicher zu gestalten. Java hat in den letzten Jahren einige Verbesserungen eingef\u00fchrt, wie z. B. die Ergonomie-Funktionalit\u00e4t f\u00fcr Container usw. Doch die ordnungsgem\u00e4\u00dfe Funktion von Java in einem Container bleibt nach wie vor eine Herausforderung. Daher werden wir zun\u00e4chst einige der internen Herausforderungen von Java betrachten, die sich besonders bei der Entwicklung containerorientierter Java-Anwendungen deutlich zeigen.<\/a><\/noindex>-Funktionen \u2013 all das ist heute, was man nennt, auf dem Vormarsch. Seit kurzem ist die Erstellung von cloudbasierten Architekturen viel einfacher und zug\u00e4nglicher geworden, jedoch sind die Probleme geblieben \u2013 insbesondere f\u00fcr Java-Entwickler. Beispielsweise gibt es bei serverlosen Funktionen und Mikrodiensten einen akuten Bedarf, die Startzeit zu verk\u00fcrzen, den Speicherbedarf zu reduzieren und die Entwicklung benutzerfreundlicher und angenehmer zu gestalten. In den letzten Jahren hat Java einige Verbesserungen eingebracht, wie die \u00fcberarbeitete Ergonomie f\u00fcr Container und \u00c4hnliches. Dennoch bleibt es nach wie vor schwierig, Java in einem Container ordnungsgem\u00e4\u00df zum Laufen zu bringen. Daher werden wir zun\u00e4chst einige der internen Herausforderungen von Java betrachten, die sich besonders bei der Entwicklung von containerbasierten Java-Anwendungen scharf zeigen.<\/p>\n<p>Lassen Sie uns zun\u00e4chst einen Blick auf die Geschichte werfen.<\/p>\n<p><img decoding=\"async\" alt=\"Wie Quarkus imperatives und reaktives Programmieren vereint\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Threads und Container<\/h3>\n<p>\nSeit Version 8u131 unterst\u00fctzt Java mehr oder weniger Container durch Verbesserungen in der Ergonomie-Funktionalit\u00e4t. Insbesondere wei\u00df die JVM jetzt, auf wie vielen Prozessorkernen sie ausgef\u00fchrt wird und kann die Thread-Pools entsprechend anpassen \u2013 in der Regel Fork\/Join-Pools. Das ist sicherlich gro\u00dfartig, aber nehmen wir an, wir haben eine traditionelle Webanwendung, die HTTP-Servlets nutzt und in Tomcat, Jetty und \u00e4hnlichem l\u00e4uft. Infolgedessen erzeugt diese Anwendung f\u00fcr jede Anfrage einen separaten Thread und erm\u00f6glicht es ihm, diesen Thread w\u00e4hrend der Wartezeit auf Ein- und Ausgabeoperationen, z. B. beim Zugriff auf Datenbanken, Dateien oder andere Dienste, zu blockieren. Das bedeutet, dass die Gr\u00f6\u00dfe einer solchen Anwendung nicht von der Anzahl der verf\u00fcgbaren Kerne abh\u00e4ngt, sondern von der Anzahl gleichzeitiger Anfragen. Dar\u00fcber hinaus bedeutet dies, dass Quoten oder Limits in Kubernetes bez\u00fcglich der Anzahl der Kerne hier nicht wirklich helfen, und letztendlich wird dies zu Drosselung f\u00fchren.<\/p>\n<h3>Speicherersch\u00f6pfung<\/h3>\n<p>\nThreads sind Speicher. Und interne Container-Speichereinschr\u00e4nkungen sind keineswegs eine Allheilmittel. Fangen Sie einfach an, die Anzahl der Anwendungen und Threads zu erh\u00f6hen, und fr\u00fcher oder sp\u00e4ter werden Sie mit einem kritischen Anstieg der Kontextwechselrate konfrontiert sein, was wiederum zu einer Verschlechterung der Leistung f\u00fchrt. Dar\u00fcber hinaus, wenn die Anwendung traditionelle Mikrodienst-Frameworks verwendet oder sich mit Datenbanken verbindet oder Caching nutzt oder anderweitig zus\u00e4tzlichen Speicher verbraucht, ben\u00f6tigen Sie offensichtlich ein Werkzeug, das es Ihnen erm\u00f6glicht, in die JVM hinein zu sehen und zu beobachten, wie sie den Speicher verwaltet, ohne dabei die JVM selbst zu zerst\u00f6ren (z. B. XX:+UseCGroupMemoryLimitForHeap). Und selbst wenn die JVM seit Java 9 gelernt hat, cgroups zu erkennen und sich entsprechend anzupassen, bleibt das Reservieren und Verwalten von Speicher eine ziemlich komplexe Angelegenheit.<\/p>\n<h3>Quoten und Limits<\/h3>\n<p>\nIn Java 11 wurde die Unterst\u00fctzung f\u00fcr CPU-Quoten (wie PreferContainerQuotaForCPUCount) eingef\u00fchrt. Kubernetes bietet ebenfalls Unterst\u00fctzung f\u00fcr Limits und Quoten. Ja, das alles macht Sinn, aber wenn die Anwendung erneut die zugewiesene Quote \u00fcberschreitet, kommen wir wieder zu der Situation, dass die Gr\u00f6\u00dfe \u2013 wie im Fall traditioneller Java-Anwendungen \u2013 nach der Anzahl der Kerne bestimmt wird, wobei f\u00fcr jede Anfrage ein separater Thread zugewiesen wird, was bedeutet, dass all dies nur wenig n\u00fctzt.<br \/>\nDar\u00fcber hinaus l\u00f6sen die Verwendung von Quoten und Limits oder von Funktionen zur horizontalen Skalierung (Scale-Out) der zugrunde liegenden Kubernetes-Plattform das Problem nicht von selbst. Wir investieren einfach mehr Ressourcen, um das urspr\u00fcngliche Problem zu l\u00f6sen, oder landen schlie\u00dflich bei einer \u00dcbernutzung von Ressourcen. Und wenn es sich um ein stark ausgelastetes System in einer \u00f6ffentlichen Cloud handelt, beginnen wir nahezu sicher, mehr Ressourcen zu verwenden, als tats\u00e4chlich erforderlich sind.<\/p>\n<h3>Und was ist mit all dem zu tun?<\/h3>\n<p>\nEinfach ausgedr\u00fcckt, sollten asynchrone und nicht-blockierende E\/A-Bibliotheken sowie Frameworks wie Netty verwendet werden, <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> oder Akka. Diese eignen sich aufgrund ihrer reaktiven Natur viel besser f\u00fcr die Arbeit in Containern. Dank der nicht-blockierenden E\/A kann der gleiche Thread mehrere gleichzeitige Anfragen gleichzeitig bearbeiten. W\u00e4hrend eine Anfrage auf Ergebnisse von E\/A wartet, wird der sie bearbeitende Thread freigegeben und k\u00fcmmert sich um eine andere Anfrage. Und wenn die Ergebnisse der E\/A endlich eintreffen, wird die Bearbeitung der ersten Anfrage fortgesetzt. Durch die Abwechselung der Bearbeitung von Anfragen innerhalb desselben Threads l\u00e4sst sich die Gesamtzahl der Threads reduzieren und der Ressourcenverbrauch bei der Bearbeitung von Anfragen verringern.<\/p>\n<p>Bei nicht-blockierender E\/A wird die Anzahl der Kerne zum entscheidenden Parameter, da sie die Anzahl der E\/A-Threads bestimmt, die parallel ausgef\u00fchrt werden k\u00f6nnen. Bei richtiger Nutzung erm\u00f6glicht dies eine effiziente Verteilung der Last auf die Kerne und die Bew\u00e4ltigung h\u00f6herer Lasten mit weniger Ressourcen.<\/p>\n<h3>Wie, und das ist alles?<\/h3>\n<p>\nNein, es gibt noch mehr. Reaktive Programmierung hilft, Ressourcen besser zu nutzen, hat aber auch ihren Preis. Insbesondere muss der Code gem\u00e4\u00df den Prinzipien der Nichtblockierbarkeit umgeschrieben werden und die Blockierung von E\/A-Threads muss vermieden werden. Das ist eine ganz andere Entwicklungs- und Ausf\u00fchrungsweise. Und obwohl es hier viele n\u00fctzliche Bibliotheken gibt, ist es dennoch ein radikaler Wechsel der gewohnten Denkweise.<\/p>\n<p>Zun\u00e4chst m\u00fcssen Sie lernen, Code zu schreiben, der asynchron ausgef\u00fchrt wird. Sobald Sie mit nicht blockierendem Input-Output beginnen, m\u00fcssen Sie ausdr\u00fccklich festlegen, was geschehen soll, wenn eine Antwort auf die Anfrage eingeht. Einfach blockieren und warten funktioniert nicht mehr. Stattdessen k\u00f6nnen Sie R\u00fcckrufe \u00fcbergeben, reaktive Programmierung verwenden oder Fortsetzungen nutzen. Aber das ist noch nicht alles: Um nicht blockierenden Input-Output zu verwenden, ben\u00f6tigen Sie auch nicht blockierende Server und Clients, idealerweise \u00fcberall. Im Fall von HTTP ist alles einfach, aber es gibt auch Datenbanken und Dateisysteme und vieles mehr.<\/p>\n<p>Obwohl totale durchg\u00e4ngig reaktive Programmierung maximale Effizienz bietet, ist es in der Praxis oft schwierig, einen solchen Wechsel zu verarbeiten. Daher wird die F\u00e4higkeit, reaktiven und imperativen Code zu kombinieren, eine wesentliche Voraussetzung daf\u00fcr, dass:<\/p>\n<ol>\n<li>Ressourcen in den am st\u00e4rksten belasteten Bereichen des Softwaresystems effizient genutzt werden;<\/li>\n<li>ein einfacher gestalteter Code in den anderen Teilen verwendet werden kann.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Wir pr\u00e4sentieren Quarkus<\/h3>\n<p>\nGenau das ist die Essenz von Quarkus \u2013 die Vereinigung von reaktiven und imperativen Modellen innerhalb einer Laufzeitumgebung.<\/p>\n<p>Quarkus basiert auf Vert.x und Netty, \u00fcber denen eine Vielzahl von reaktiven Frameworks und Erweiterungen eingesetzt werden, die dem Entwickler helfen sollen. Quarkus ist nicht nur f\u00fcr den Bau von HTTP-Mikroservices gedacht, sondern auch f\u00fcr ereignisgesteuerte Architekturen. Dank seiner reaktiven Natur arbeitet es sehr effizient mit Nachrichtensystemen (Apache Kafka, AMQP usw.).<\/p>\n<p>Die ganze Kunst besteht darin, denselben reaktiven Motor sowohl f\u00fcr imperativen als auch f\u00fcr reaktiven Code zu nutzen.<\/p>\n<p><img decoding=\"async\" alt=\"Wie Quarkus imperatives und reaktives Programmieren vereint\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus bew\u00e4ltigt dies gl\u00e4nzend. Die Wahl zwischen imperativen und reaktiven Ans\u00e4tzen ist offensichtlich \u2013 sowohl f\u00fcr den einen als auch f\u00fcr den anderen das reaktive Kernsystem zu verwenden. Dabei hilft es besonders gut mit schnellem, nicht-blockierendem Code, der nahezu alles verarbeitet, was durch den Ereignis-Loop-Thread (event-loop thread, auch bekannt als IO-Thread) l\u00e4uft. Aber wenn Sie klassische REST-Anwendungen oder clientseitige Anwendungen haben, hat Quarkus ein imperatives Programmiermodell bereit. Zum Beispiel basiert die Unterst\u00fctzung von HTTP in Quarkus auf der Verwendung eines nicht-blockierenden reaktiven Engines (Eclipse Vert.x und Netty). Alle HTTP-Anfragen, die Ihre Anwendung erh\u00e4lt, durchlaufen zun\u00e4chst den Ereignis-Loop (IO-Thread), bevor sie an den Teil des Codes gesendet werden, der die Anfragen steuert. Je nach Ziel kann der Steuerungscode innerhalb eines separaten Threads (dem sogenannten worker thread, verwendet bei Servlets und Jax-RS) aufgerufen werden oder den urspr\u00fcnglichen Eingabe-\/Ausgabe-Stream verwenden (reaktiver Pfad reactive route).<\/p>\n<p><img decoding=\"async\" alt=\"Wie Quarkus imperatives und reaktives Programmieren vereint\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>F\u00fcr die Konnektoren von Nachrichten\u00fcbertragungssystemen werden nicht-blockierende Clients verwendet, die auf der Vert.x-Engine basieren. Daher k\u00f6nnen Sie Nachrichten von Messaging-Middleware-Systemen effizient senden, empfangen und verarbeiten.<\/p>\n<p>Auf der Website <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> es wurden mehrere gute Anleitungen zusammengestellt, die Ihnen den Einstieg in Quarkus erleichtern:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Verwendung von Reaktiven Routen<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Reaktive SQL-Clients<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Verwendung von Apache Kafka mit Reaktiver Nachrichten\u00fcbertragung<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">Verwendung von AMQP mit Reaktiver Nachrichten\u00fcbertragung<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Verwendung der Vert.x-API<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nDar\u00fcber hinaus haben wir Online-\u00dcbungen vorbereitet, um verschiedene Aspekte der reaktiven Programmierung kennenzulernen. Dazu ben\u00f6tigen Sie lediglich einen Browser; keine IDE ist erforderlich, und ein Computer ist nicht unbedingt n\u00f6tig. Diese \u00dcbungen finden Sie unter <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">hier<\/a><\/noindex>.<\/p>\n<h3>N\u00fctzliche Ressourcen<\/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 Gr\u00fcnde, Quarkus auszuprobieren<\/a><\/noindex><\/li>\n<li>Die Projektwebsite von Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Das Quarkus-Projekt auf GitHub \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Der Twitter-Account des Quarkus-Projekts \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Der Chat des Quarkus-Projekts \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Die Foren des Quarkus-Projekts \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-Tutorials \u00fcber Quarkus, um sich mit dem Thema vertraut zu machen<\/h3>\n<p>\nWie auf der Website geschrieben wird, <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\/\">unterst\u00fctzt Quarkus die Verwendung des Advanced Message Queuing Protocol (<\/a><\/noindex> logischen Kanal, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-ein Java-Stack, der auf GraalVM und OpenJDK HotSpot abgestimmt ist und aus den besten Java-Bibliotheken und Standards besteht.<\/p>\n<p>Um Ihnen bei der Einarbeitung zu helfen, haben wir 10 Video-Tutorials ausgew\u00e4hlt, die verschiedene Aspekte von Quarkus und Beispiele f\u00fcr seine Nutzung behandeln:<\/p>\n<h4>1. Wir stellen Quarkus vor: Ein Framework der n\u00e4chsten Generation f\u00fcr Java in Kubernetes<\/h4>\n<p>\nAutoren: Thomas Qvarnstrom und Jason Greene<br \/>\nDas Ziel des Quarkus-Projekts ist es, eine Java-Plattform f\u00fcr Kubernetes und serverless Umgebungen zu schaffen und reaktive sowie imperativen Programmiermodelle in einer einheitlichen Laufzeitumgebung zu kombinieren, damit Entwickler flexibel beim Arbeiten mit einer Vielzahl von verteilten Anwendungsarchitekturen gestalten k\u00f6nnen. Erfahren Sie mehr in der Einf\u00fchrungsvorlesung unten.<\/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=\"Video abspielen\" 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: ultraschnelle subatomare Java<\/h4>\n<p>\nAutor: Burr Sutter<br \/>\nDas Video-Tutorial aus dem DevNation Live Internet-Vortrag zeigt, wie man Quarkus zur Optimierung von Unternehmens-Java-Anwendungen, APIs, Mikrodiensten und serverlosen Funktionen in einer Kubernetes\/OpenShift-Umgebung verwenden kann, wodurch sie viel kleiner, schneller und skalierbarer werden.<\/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=\"Video abspielen\" 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 und GraalVM: Hibernate auf ultraschnelle Geschwindigkeiten bringen und auf subatomare Gr\u00f6\u00dfen komprimieren<\/h4>\n<p>\nAutor: Sanne Grinovero<br \/>\nIn der Pr\u00e4sentation erfahren Sie, wie Quarkus entstanden ist, wie es funktioniert und wie es komplexe Bibliotheken wie Hibernate ORM mit nativem GraalVM-kompatibel macht.<\/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=\"Video abspielen\" 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. Lernen, serverless Anwendungen zu entwickeln<\/h4>\n<p>\nAutor: Marthen Luther<br \/>\nIm folgenden Video wird gezeigt, wie man mit Quarkus eine einfache Java-Anwendung erstellt und sie als serverless Anwendung auf Knative bereitstellt.<\/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=\"Video abspielen\" 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: Programmieren mit Freude<\/h4>\n<p>\nAutor: Edson Yanaga<br \/>\nEin Videoleitfaden zur Erstellung Ihres ersten Quarkus-Projekts, der zeigt, warum Quarkus die Herzen der Entwickler erobert.<\/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=\"Video abspielen\" 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 und Container \u2013 wie wird ihre gemeinsame Zukunft aussehen?<\/h4>\n<p>\nAutor: Mark Little<br \/>\nDiese Pr\u00e4sentation gibt einen Einblick in die Geschichte von Java und erkl\u00e4rt, warum Quarkus die Zukunft von Java ist.<\/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=\"Video abspielen\" 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: ultraschnelle subatomare Java<\/h4>\n<p>\nAutor: Dimitris Andreadis<br \/>\n\u00dcberblick \u00fcber die Vorteile von Quarkus, die von Entwicklern gesch\u00e4tzt werden: Einfachheit, ultraschnelle Geschwindigkeiten, beste Bibliotheken und Standards.<\/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=\"Video abspielen\" 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 und subatomare reaktive Systeme<\/h4>\n<p>\nAutor: Clement Escoffier<br \/>\nDurch die Integration mit GraalVM bietet Quarkus eine ultraschnelle Entwicklungserfahrung und eine subatomare Laufzeitumgebung. Der Autor spricht \u00fcber die reaktive Seite von Quarkus und dar\u00fcber, wie sie bei der Erstellung reaktiver Anwendungen und Datenstreaming-Anwendungen genutzt werden kann.<\/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=\"Video abspielen\" 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 und schnelle Anwendungsentwicklung in Eclipse MicroProfile<\/h4>\n<p>\nAutor: John Clingan<br \/>\nDurch die Kombination von Eclipse MicroProfile und Quarkus k\u00f6nnen Entwickler voll funktionsf\u00e4hige MicroProfile-Containeranwendungen erstellen, die in nur wenigen Millisekunden starten. Das Video erl\u00e4utert im Detail, wie man eine MicroProfile-Containeranwendung f\u00fcr das Deployment auf der Kubernetes-Plattform codiert.<\/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=\"Video abspielen\" 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>\nAutor: Markus Biel<br \/>\nDer Autor zeigt, wie man Quarkus nutzt, um superkompakte und superschnelle Java-Container zu erstellen, die einen echten Durchbruch, insbesondere in serverlosen Umgebungen, erm\u00f6glichen.<\/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=\"Video abspielen\" 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 \/>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Wie Quarkus imperatives und reaktives Programmieren vereint | ProHoster","description":"In diesem Jahr planen wir, die Themen Container, Cloud-Native Java und","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}