{"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, uns ernsthaft mit dem Thema Containerentwicklung zu besch\u00e4ftigen, <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 Quarkus-Frameworks sein, das bereits <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">auf Habr\u00e9 behandelt wurde.<\/a><\/noindex> Der heutige Artikel widmet sich nicht nur der Architektur der \u201esubatomaren ultraschnellen Java\u201c, sondern auch den Perspektiven, die Quarkus f\u00fcr Unternehmen mit sich bringt.<\/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 \/>\nJava und JVM sind nach wie vor \u00e4u\u00dferst beliebt, doch bei der Arbeit mit serverlosen Technologien und cloudbasierten Mikrodiensten kommen Java und andere JVM-Sprachen immer seltener zum Einsatz, da sie zu viel Speicherplatz ben\u00f6tigen und zu langsam laden, was sie f\u00fcr den Einsatz in kurzlebigen Containern unpraktisch macht. Gl\u00fccklicherweise beginnt sich diese Situation dank Quarkus gerade zu \u00e4ndern.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Die ultraschnelle subatomare Java hat ein neues Level erreicht!<\/h3>\n<p>\n42 Releases, 8 Monate Community-Arbeit und 177 beeindruckende Entwickler \u2013 dies f\u00fchrte zur Ver\u00f6ffentlichung von <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, einem Release, das einen wichtigen Meilenstein in der Projektentwicklung darstellt und zahlreiche gro\u00dfartige Funktionen und M\u00f6glichkeiten bietet (mehr dar\u00fcber k\u00f6nnen Sie im <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">Ank\u00fcndigung lesen)<\/a><\/noindex>).<\/p>\n<p>Heute zeigen wir, wie Quarkus Modelle der imperativen und reaktiven Programmierung auf der Grundlage eines einheitlichen reaktiven Kerns vereint. Wir beginnen mit einem kurzen historischen R\u00fcckblick und werden dann detailliert er\u00f6rtern, was den Dualismus des reaktiven Kerns von Quarkus ausmacht und wie <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>-Entwickler von diesen Vorteilen profitieren k\u00f6nnen.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Mikroservices<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">ereignisgesteuerten Architekturen<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">serverless<\/a><\/noindex>-Funktionen \u2013 all dies ist heute, was man sozusagen im Trend liegt. Seit kurzem ist die Erstellung von cloud-orientierten Architekturen erheblich einfacher und zug\u00e4nglicher geworden, dennoch bestehen Probleme \u2013 insbesondere f\u00fcr Java-Entwickler. Zum Beispiel besteht bei serverlosen Funktionen und Microservices ein dringender Bedarf, die Startzeit zu verk\u00fcrzen, den Speicherverbrauch zu senken und die Entwicklung insgesamt angenehmer und benutzerfreundlicher zu gestalten. In den letzten Jahren hat Java einige Verbesserungen gebracht, wie optimierte Funktionen f\u00fcr Container und mehr. Doch eine ordnungsgem\u00e4\u00dfe Ausf\u00fchrung von Java in einem Container bleibt nach wie vor eine Herausforderung. Daher beginnen wir mit einer Betrachtung einiger interner Herausforderungen von Java, die besonders stark bei der Entwicklung von containerbasierten Java-Anwendungen hervortreten.<\/p>\n<p>Zun\u00e4chst werfen wir einen Blick auf die Geschichte.<\/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>\nMit der Version 8u131 hat Java begonnen, Container besser zu unterst\u00fctzen, dank Verbesserungen in der Ergonomie-Funktionalit\u00e4t. Insbesondere wei\u00df die JVM jetzt, auf wie vielen Prozessorkernen sie l\u00e4uft und kann entsprechend die Thread-Pools anpassen \u2013 typischerweise Fork\/Join-Pools. Das ist zweifellos gro\u00dfartig, aber nehmen wir an, wir haben eine traditionelle Webanwendung, die HTTP-Servlets nutzt und auf Tomcat, Jetty und anderen Plattformen l\u00e4uft. In diesem Fall wird die Anwendung f\u00fcr jede Anfrage einen eigenen Thread erzeugen und diesen Thread blockieren, w\u00e4hrend sie auf Eingabe-\/Ausgabeoperationen wartet, beispielsweise beim Zugriff auf Datenbanken, Dateien oder andere Dienste. Das bedeutet, dass die Gr\u00f6\u00dfe einer solchen Anwendung nicht von der Anzahl der verf\u00fcgbaren Kerne abh\u00e4ngt, sondern von der Anzahl der gleichzeitigen Anfragen. Dar\u00fcber hinaus bedeutet dies, dass Quoten oder Limits in Kubernetes bez\u00fcglich der Anzahl der Kerne hier nicht wirklich helfen werden, und letztendlich wird es zu Drosselungen f\u00fchren.<\/p>\n<h3>Speicherersch\u00f6pfung<\/h3>\n<p>\nThreads sind der Speicher. Und interne containerbezogene Speicherbeschr\u00e4nkungen sind keineswegs die L\u00f6sung f\u00fcr alle Probleme. Beginnen Sie einfach damit, die Anzahl der Anwendungen und Threads zu erh\u00f6hen, und irgendwann werden Sie unweigerlich mit einer kritischen Zunahme der Kontextwechselraten konfrontiert, was wiederum die Leistung beeintr\u00e4chtigt. Dar\u00fcber hinaus, wenn Ihre Anwendung traditionelle Microservices-Frameworks verwendet, mit Datenbanken verbunden ist, Caching nutzt oder auf andere Weise zus\u00e4tzlichen Speicher verbraucht, ben\u00f6tigen Sie definitiv ein Werkzeug, das Ihnen einen Einblick in die JVM gew\u00e4hrt und zeigt, wie sie den Speicher verwaltet, ohne die JVM selbst zu gef\u00e4hrden (zum Beispiel XX:+UseCGroupMemoryLimitForHeap). Und selbst wenn die JVM seit Java 9 in der Lage ist, cgroups zu erkennen und sich entsprechend anzupassen, bleibt die Reservierung und Verwaltung von Speicher eine recht komplexe Angelegenheit.<\/p>\n<h3>Kontingente und Limits<\/h3>\n<p>\nIn Java 11 gibt es Unterst\u00fctzung f\u00fcr CPU-Quotas (zum Beispiel PreferContainerQuotaForCPUCount). Kubernetes bietet ebenfalls Unterst\u00fctzung f\u00fcr Limits und Quotas. Das ist sinnvoll, aber wenn die Anwendung erneut die zugewiesene Quote \u00fcbersteigt, gelangen wir wieder zu der Frage, wie bei traditionellen Java-Anwendungen, n\u00e4mlich dass die Gr\u00f6\u00dfe nach der Anzahl der Kerne bestimmt wird und jedem Request ein separater Thread zugewiesen wird. Das bringt unterm Strich nicht viel.<br \/>\nDar\u00fcber hinaus wird durch die Verwendung von Quotas und Limits oder den Funktionen der horizontalen Skalierung der zugrunde liegenden Kubernetes-Plattform das Problem nicht gel\u00f6st. Wir verschwenden einfach mehr Ressourcen, um das urspr\u00fcngliche Problem zu l\u00f6sen, oder landen schlie\u00dflich in einer Situation mit Ressourcen\u00fcberverbrauch. In einem hochbelasteten System in einer \u00f6ffentlichen Cloud verwenden wir wahrscheinlich viel mehr Ressourcen, als tats\u00e4chlich n\u00f6tig w\u00e4ren.<\/p>\n<h3>Was kann man mit all dem anfangen?<\/h3>\n<p>\nEinfach gesagt, sollte man asynchrone und nicht blockierende Ein- und Ausgabebibliotheken sowie Frameworks wie Netty verwenden, <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. Sie sind deutlich besser geeignet f\u00fcr Container-Anwendungen aufgrund ihrer reaktiven Natur. Dank der nicht-blockierenden Eingabe\/Ausgabe kann derselbe Thread mehrere gleichzeitige Anfragen bearbeiten. W\u00e4hrend eine Anfrage auf Eingabe\/Ausgabe-Ergebnisse wartet, wird der sie verarbeitende Thread freigegeben und bearbeitet eine andere Anfrage. Sobald die Ergebnisse der Eingabe\/Ausgabe eintreffen, wird die Bearbeitung der ersten Anfrage fortgesetzt. Durch die alternierende Bearbeitung von Anfragen innerhalb desselben Threads kann die Gesamtzahl der Threads verringert und der Ressourcenverbrauch f\u00fcr die Bearbeitung von Anfragen gesenkt werden.<\/p>\n<p>Bei nicht-blockierender Eingabe\/Ausgabe wird die Anzahl der Kerne zu einem entscheidenden Parameter, da sie bestimmt, wie viele Eingabe\/Ausgabe-Threads parallel ausgef\u00fchrt werden k\u00f6nnen. Bei richtiger Verwendung erm\u00f6glicht dies eine effiziente Lastverteilung zwischen den Kernen und die Bew\u00e4ltigung h\u00f6herer Lasten mit weniger Ressourcen.<\/p>\n<h3>Wie, und das war's?<\/h3>\n<p>\nNein, es gibt noch mehr. Reaktive Programmierung hilft, Ressourcen effizienter zu nutzen, hat aber auch ihren Preis. Insbesondere muss der Code entsprechend den Prinzipien der Nichtblockierung umgeschrieben werden, um eine Blockierung von Ein-\/Ausgabestr\u00f6men zu vermeiden. Das erfordert ein ganz anderes Entwicklungs- und Ausf\u00fchrungsmodell. Und obwohl es viele n\u00fctzliche Bibliotheken gibt, ist es dennoch ein radikaler Wandel in der gewohnten Denkweise.<\/p>\n<p>Zun\u00e4chst m\u00fcssen Sie lernen, Code zu schreiben, der asynchron ausgef\u00fchrt wird. Sobald Sie mit nicht blockierenden Ein-\/Ausgaben arbeiten, m\u00fcssen Sie ausdr\u00fccklich angeben, was passieren soll, wenn eine Antwort auf die Anfrage eintrifft. 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 blockierende Ein-\/Ausgaben zu verwenden, ben\u00f6tigen Sie ebenfalls nicht blockierende Server und Clients, idealerweise \u00fcberall. Bei HTTP ist das einfach, aber es gibt auch Datenbanken, Dateisysteme und vieles mehr.<\/p>\n<p>Obwohl eine vollst\u00e4ndige durchg\u00e4ngige Reaktivit\u00e4t maximale Effizienz bietet, kann ein solcher Wandel in der Praxis schwierig umzusetzen sein. Daher wird die M\u00f6glichkeit, reaktiven und imperativen Code zu kombinieren, zu einer wesentlichen Voraussetzung f\u00fcr:<\/p>\n<ol>\n<li>Die Ressourcen in den am st\u00e4rksten belasteten Bereichen des Softwaresystems effektiv zu nutzen;<\/li>\n<li>In den anderen Teilen einen einfacheren Code-Stil zu verwenden.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Pr\u00e4sentation von Quarkus<\/h3>\n<p>\nDarum geht es bei Quarkus \u2013 die reaktiven und imperativen Modelle in einer einzigen Laufzeitumgebung zu vereinen.<\/p>\n<p>Quarkus basiert auf Vert.x und Netty, \u00fcber denen eine Reihe von reaktiven Frameworks und Erweiterungen genutzt wird, um den Entwicklern zu helfen. Quarkus ist nicht nur f\u00fcr die Erstellung von HTTP-Mikroservicen, sondern auch f\u00fcr ereignisgesteuerte Architekturen gedacht. Aufgrund seiner reaktiven Natur arbeitet es \u00e4u\u00dferst effizient mit Nachrichten\u00fcbertragungssystemen (Apache Kafka, AMQP usw.).<\/p>\n<p>Der ganze Trick liegt darin, denselben reaktiven Motor sowohl f\u00fcr imperativen als auch f\u00fcr reaktiven Code zu verwenden.<\/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 meistert das hervorragend. Die Wahl zwischen imperativem und reaktivem Programmierungsansatz ist klar \u2013 nutzen Sie f\u00fcr beides den reaktiven Kern. Dabei unterst\u00fctzt es besonders gut beim schnellen, nicht blockierenden Code, der fast alles verarbeitet, was durch den Ereignisloop (event-loop thread oder auch IO thread) l\u00e4uft. Wenn Sie jedoch klassische REST-Anwendungen oder clientseitige Anwendungen haben, h\u00e4lt Quarkus die imperative Programmiermodelle bereit. Beispielsweise basiert die HTTP-Unterst\u00fctzung in Quarkus auf der Nutzung eines nicht blockierenden und reaktiven Engines (Eclipse Vert.x und Netty). Alle HTTP-Anfragen, die Ihre Anwendung erh\u00e4lt, durchlaufen zun\u00e4chst den Ereignisloop (IO Thread) und werden dann an den Teil des Codes weitergeleitet, der die Anfragen verwaltet. Je nach Zielort kann der Anfrageverwaltungs-Code in einem separaten Thread (dem sogenannten Worker Thread, was bei Servlets und Jax-RS der Fall ist) aufgerufen werden oder den urspr\u00fcnglichen Eingabe-\/Ausgabethread (reaktiver Route) nutzen.<\/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 Nachrichtensysteme werden nicht blockierende Clients verwendet, die auf der Vert.x-Engine basieren. Dadurch 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> finden Sie eine Reihe n\u00fctzlicher Anleitungen, die Ihnen den Einstieg in Quarkus erleichtern:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Reactive Routes verwenden<\/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\">Apache Kafka mit Reaktiver Nachrichtenverarbeitung einsetzen<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">AMQP mit Reaktiver Nachrichtenverarbeitung verwenden<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Vert.x API nutzen<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nDar\u00fcber hinaus haben wir Online-Workshops vorbereitet, die verschiedene Aspekte der reaktiven Programmierung vorstellen. Sie ben\u00f6tigen lediglich einen Browser; eine IDE oder ein Computer sind nicht erforderlich. Diese Workshops 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 Projekt-Website 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 Videos zu Quarkus, um sich einzuarbeiten<\/h3>\n<p>\nWie auf der Website geschrieben <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">Quarkus.io<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/05\/09\/create-your-first-quarkus-project-with-eclipse-ide-red-hat-codeready-studio\/\">Quarkus<\/a><\/noindex> \u2013 ist es <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-orientierter Java-Stack, der f\u00fcr GraalVM und OpenJDK HotSpot optimiert ist und aus den besten Java-Bibliotheken und -Standards besteht.<\/p>\n<p>Um Ihnen bei dem Thema zu helfen, haben wir 10 Videotutorials ausgew\u00e4hlt, die verschiedene Aspekte von Quarkus und dessen Einsatzm\u00f6glichkeiten behandeln:<\/p>\n<h4>1. Einf\u00fchrung in Quarkus: Das moderne Java-Framework f\u00fcr 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 die reaktive sowie die imperative Programmiermodelle innerhalb einer einheitlichen Laufzeitumgebung zu vereinen, damit Entwickler flexibel zwischen verschiedenen Ans\u00e4tzen bei der Arbeit mit einer Vielzahl verteilter Anwendungsarchitekturen wechseln k\u00f6nnen. Erfahren Sie mehr in der einf\u00fchrenden Vorlesung 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: \u00dcberragende Geschwindigkeit f\u00fcr Java<\/h4>\n<p>\nAutor: Burr Sutter<br \/>\nDas Videotutorial aus der Online-Vorlesung DevNation Live zeigt, wie Sie Quarkus zur Optimierung von Unternehmens-Java-Anwendungen, APIs, Microservices und serverless Funktionen in Kubernetes\/OpenShift nutzen k\u00f6nnen, wodurch diese erheblich 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: Wir beschleunigen Hibernate auf H\u00f6chstgeschwindigkeiten und reduzieren es auf subatomare Gr\u00f6\u00dfen<\/h4>\n<p>\nAutor: Sanne Grinovero<br \/>\nIn der Pr\u00e4sentation erfahren Sie, wie Quarkus entstanden ist, wie es funktioniert und wie komplexe Bibliotheken wie Hibernate ORM mit GraalVM-Native-Images kompatibel gemacht werden k\u00f6nnen.<\/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. Wir lernen, serverless Anwendungen zu entwickeln<\/h4>\n<p>\nAutor: Marthen Luther<br \/>\nIm folgenden Video sehen Sie, wie Sie mit Quarkus eine einfache Java-Anwendung erstellen und diese als serverless Anwendung auf Knative bereitstellen.<\/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 video-guide f\u00fcr Ihr erstes Quarkus-Projekt, der erkl\u00e4rt, 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 sieht ihre gemeinsame Zukunft aus?<\/h4>\n<p>\nAutor: Mark Little<br \/>\nDiese Pr\u00e4sentation gibt einen \u00dcberblick \u00fcber 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: ultraschnelles subatomares Java<\/h4>\n<p>\nAutor: Dimitris Andreadis<br \/>\nEine \u00dcbersicht \u00fcber die von Entwicklern anerkannten Vorteile von Quarkus: Einfachheit, extreme 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 \/>\nDank der Integration mit GraalVM bietet Quarkus eine extrem schnelle Entwicklungsumgebung und eine subatomare Ausf\u00fchrungsumgebung. Der Autor spricht \u00fcber die reaktive Seite von Quarkus und wie man sie beim Erstellen reaktiver Anwendungen und Streaming-Anwendungen nutzen 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 die 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 Containeranwendungen von MicroProfile erstellen, die in nur wenigen Millisekunden gestartet werden. Im Video wird ausf\u00fchrlich erl\u00e4utert, wie man eine Containeranwendung von MicroProfile f\u00fcr die Bereitstellung auf der Kubernetes-Plattform erstellt.<\/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: Marcus Biel<br \/>\nDer Autor zeigt, wie man Quarkus verwendet, um extrem kleine und extrem schnelle Java-Container zu erstellen, die einen echten Durchbruch erm\u00f6glichen, insbesondere in serverlosen Umgebungen.<\/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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438 Kubernetes. \u041b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u0442\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Quarkus, \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u00ab\u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u043e\u0439 Java\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Quarkus \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432 Enterprise. Java \u0438 JVM \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"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 Kubernetes. \u041b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u0442\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Quarkus, \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u00ab\u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u043e\u0439 Java\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Quarkus \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432 Enterprise. Java \u0438 JVM \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/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 verbindet | ProHoster","description":"In diesem Jahr planen wir, die Themen Container, Cloud-Native Java und Kubernetes ernsthaft voranzutreiben. Eine logische Fortsetzung dieser Themen wird die Diskussion \u00fcber das Framework Quarkus sein, das bereits auf Habr behandelt wurde. Der heutige Artikel widmet sich nicht nur der Funktionsweise von \u201esubatomarem, ultraschnellem Java\u201c, sondern auch den Perspektiven, die Quarkus f\u00fcr Unternehmen bietet. Java und JVM sind nach wie vor \u00e4u\u00dferst beliebt, insbesondere im Kontext serverloser Technologien.","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 Kubernetes. \u041b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u0442\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Quarkus, \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u00ab\u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u043e\u0439 Java\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Quarkus \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432 Enterprise. Java \u0438 JVM \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438","og:url":"https:\/\/prohoster.info\/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"},"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}]}}