Einführung
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Wer sollte dieses Buch lesen?
Reaktive Programmierung mit RxJava richtet sich an fortgeschrittene Java-Programmierer/innen. Du solltest mit Java einigermaßen vertraut sein; Vorkenntnisse in reaktiver Programmierung sind jedoch nicht erforderlich. Viele Konzepte in diesem Buch beziehen sich auf funktionale Programmierung, aber auch damit musst du nicht vertraut sein. Es gibt zwei verschiedene Gruppen von Programmierer/innen, die von diesem Buch profitieren können:
-
Handwerker, die eine bessere Leistung auf dem Server oder einen besser wartbaren Code auf mobilen Geräten suchen. Wenn du zu dieser Kategorie gehörst, findest du hier Ideen und Lösungen für echte Probleme sowie praktische Ratschläge. In diesem Fall ist RxJava nur ein weiteres Werkzeug, bei dessen Beherrschung dieses Buch helfen wird.
-
Neugierige Entwickler/innen, die von reaktiver Programmierung oder RxJava im Besonderen gehört haben und ein gutes Verständnis dafür bekommen wollen. Wenn das auf dich zutrifft und du nicht vorhast, RxJava im Produktionscode zu nutzen, wirst du deinen Horizont erheblich erweitern.
Auch wenn du ein praktischer Softwarearchitekt bist, wird dir dieses Buch wahrscheinlich helfen. RxJava beeinflusst die Gesamtarchitektur ganzer Systeme und ist daher wissenswert. Aber auch wenn du gerade erst mit dem Programmieren beginnst, solltest du die ersten Kapitel lesen, in denen die Grundlagen erklärt werden. Grundlegende Konzepte wie Transformationen und Komposition sind ziemlich universell und haben nichts mit reaktiver Programmierung zu tun.
Anmerkung von Ben Christensen
Im Jahr 2012 arbeitete ich an einer neuen Architektur für die Netflix-API. Dabei wurde klar, dass wir die Gleichzeitigkeit und asynchrone Netzwerkanfragen nutzen mussten, um unsere Ziele zu erreichen. Bei der Erkundung von Ansätzen traf ich Jafar Husain, der mir einen Ansatz namens "Rx" verkaufen wollte, den er bei Microsoft gelernt hatte. Damals kannte ich mich mit Gleichzeitigkeit gut aus, dachte aber immer noch zwingend darüber nach, und zwar auf eine sehr Java-zentrierte Art und Weise, da Java mein Haupteinkommensbringer war und ich daher die meiste Zeit damit verbracht habe.
Als Jafar versuchte, mir den Ansatz schmackhaft zu machen, war es aufgrund des funktionalen Programmierstils schwierig, die Konzepte zu begreifen, und ich wehrte mich dagegen. Es folgten Monate voller Argumente und Diskussionen, in denen Jafar und ich unsere zahlreichen Whiteboard-Sitzungen fortsetzten, bis ich die theoretischen Grundlagen und schließlich die Eleganz und Leistungsfähigkeit von Reactive Extensions verstanden hatte.
Wir haben uns entschieden, das Rx-Programmiermodell in die Netflix-API zu integrieren und haben schließlich die Java-Implementierung von Reactive Extensions mit dem Namen RxJava geschaffen, in Anlehnung an die von Microsoft mit Rx.Net und RxJS eingeführte Namenskonvention.
In den rund drei Jahren, in denen ich an RxJava gearbeitet habe, das meiste davon offen auf GitHub, hatte ich das Privileg, mit einer wachsenden Community und mehr als 120 Mitwirkenden zusammenzuarbeiten, um RxJava in ein ausgereiftes Produkt zu verwandeln, das in vielen Produktionssystemen sowohl auf Server- als auch auf Client-Seite eingesetzt wird. Es ist so erfolgreich, dass es mehr als 15.000 Sterne auf GitHub erhalten hat, was es zu einem der 200 besten Projekte und dem dritthöchsten unter den Projekten macht , die Java verwenden.
George Campbell, Aaron Tull und Matt Jacobs von Netflix haben wesentlich dazu beigetragen, RxJava von frühen Builds zu dem zu machen, was es geworden ist, einschließlich der Hinzufügung von lift
, Subscriber
, Backpressure und JVM-Polyglot-Unterstützung. Dávid Karnok beteiligte sich an dem Projekt und hat mich inzwischen an Commits und Codezeilen übertroffen. Er war ein wichtiger Faktor für den Erfolg des Projekts und hat nun die Leitung des Projekts übernommen.
Ich muss Erik Meijer danken, der Rx entwickelt hat, als er bei Microsoft war. Seit er das Unternehmen verlassen hat, hatte ich die Gelegenheit, mit ihm bei Netflix an RxJava zu arbeiten, und jetzt habe ich das Glück, direkt mit ihm bei Facebook zusammenzuarbeiten. Ich empfinde es als große Ehre, so viele Stunden mit ihm am Whiteboard verbringen zu können, um zu diskutieren und zu lernen. Es macht wirklich einen Unterschied, einen Mentor wie Erik zu haben, der einem hilft, auf Augenhöhe zu denken.
Auf dem Weg dorthin habe ich auch auf vielen Konferenzen über RxJava und reaktive Programmierung gesprochen und dabei viele Leute kennengelernt, die mir geholfen haben, viel mehr über Code und Architektur zu lernen, als ich es alleine je getan hätte.
Netflix hat meine Zeit und meinen Einsatz für das Projekt phänomenal unterstützt und mir Unterstützung für die technische Dokumentation gegeben, die ich allein niemals hätte schreiben können. Ein Open-Source-Projekt dieser Reife und dieses Umfangs kann nicht erfolgreich sein, wenn man es nicht neben seinem "Tagesjob" und unter Beteiligung vieler Menschen mit unterschiedlichen Fähigkeiten machen kann.
Im ersten Kapitel versuche ich zu erklären, warum reaktive Programmierung ein nützlicher Programmieransatz ist und wie RxJava diese Prinzipien konkret umsetzt.
Der Rest des Buches ist von Tomasz geschrieben, der eine tolle Arbeit geleistet hat. Ich hatte die Gelegenheit, das Buch zu rezensieren und Vorschläge zu machen, aber es ist sein Buch, und er wird die Details ab Kapitel 2 lehren.
Anmerkung von Tomasz Nurkiewicz
Zum ersten Mal bin ich 2013 auf RxJava gestoßen, als ich für ein Finanzinstitut arbeitete. Wir hatten mit großen Strömen von Marktdaten zu tun, die in Echtzeit verarbeitet wurden. Zu diesem Zeitpunkt bestand die Datenpipeline aus Kafka, das Nachrichten lieferte, Akka, das Trades verarbeitete, Clojure, das Daten transformierte, und einer eigens entwickelten Sprache, um Änderungen im System zu verbreiten. RxJava war eine sehr überzeugende Wahl, weil es eine einheitliche API hatte, die sehr gut für verschiedene Datenquellen funktionierte.
Im Laufe der Zeit habe ich die reaktive Programmierung in weiteren Szenarien ausprobiert, in denen Skalierbarkeit und Durchsatz entscheidend waren. Die Implementierung von Systemen auf reaktive Weise ist definitiv anspruchsvoller. Aber die Vorteile sind weitaus wichtiger, einschließlich einer besseren Hardwareauslastung und damit Energieeinsparungen. Um die Vorteile dieses Programmiermodells voll auszuschöpfen, müssen Entwickler über relativ einfach zu bedienende Werkzeuge verfügen. Wir glauben, dass Reactive Extensions den goldenen Mittelweg zwischen Abstraktion, Komplexität und Leistung finden.
Dieses Buch bezieht sich auf RxJava 1.1.6, sofern nicht anders angegeben. Obwohl RxJava Java 6 und höher unterstützt, verwenden fast alle Beispiele die Lambda-Syntax von Java 8. Einige Beispiele in dem Kapitel, in dem wir Android behandeln(Kapitel 8), zeigen, wie wir mit der ausführlichen Syntax vor Lambda-Ausdrücken umgehen. Abgesehen davon verwenden wir nicht immer die kürzestmögliche Syntax (wie Methodenreferenzen), um die Lesbarkeit zu verbessern, wo es sinnvoll ist.
Navigieren in diesem Buch
Das Buch ist so aufgebaut, dass du am meisten davon hast, wenn du es von vorne bis hinten durchliest. Wenn du dir nicht so viel Zeit nehmen kannst, kannst du dir auch nur die Teile herauspicken, die für dich am interessantesten sind. Wenn es ein Konzept gibt, das schon früher eingeführt wurde, wirst du höchstwahrscheinlich einen Verweis darauf finden. Im Folgenden findest du einen Überblick über die einzelnen Kapitel:
-
Kapitel 1 geht kurz auf die Entstehung von RxJava, die grundlegenden Konzepte und Ideen ein(Ben).
-
In Kapitel 2 wird erklärt, wie RxJava in deiner Anwendung erscheinen kann und wie du mit ihm interagierst. Dieses Kapitel ist sehr grundlegend, aber es ist enorm wichtig, Konzepte wie heiße und kalte Quellen zu verstehen(Tomasz).
-
Kapitel 3 ist eine rasante Tour durch die vielen Operatoren von RxJava. Wir stellen dir die ausdrucksstarken und mächtigen Funktionen vor, die die Grundlage dieser Bibliothek bilden(Tomasz).
-
Kapitel 4 ist praktischer und zeigt, wie du RxJava an verschiedenen Stellen in deine Codebasis einbindest. Es geht auch auf die Gleichzeitigkeit ein(Tomasz).
-
Kapitel 5 ist fortgeschritten und erklärt, wie man reaktive Anwendungen von oben nach unten implementiert(Tomasz).
-
In Kapitel 6 wird ein wichtiges Problem der Flusskontrolle und der Backpressure-Mechanismen in RxJava erläutert, die diese unterstützen(Tomasz).
-
Kapitel 7 zeigt Techniken für Unit-Tests, Wartung und Fehlerbehebung von Rx-basierten Anwendungen(Tomasz).
-
Kapitel 8 zeigt ein paar ausgewählte Anwendungen von RxJava, insbesondere in verteilten Systemen(Tomasz).
-
Kapitel 9 beleuchtet die Zukunftspläne für RxJava 2.x(Ben).
Online-Ressourcen
Alle Marmordiagramme in diesem Buch sind der offiziellen RxJava-Dokumentation entnommen, die unter der Apache License Version 2.0 veröffentlicht wurde.
In diesem Buch verwendete Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Constant width bold
-
Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.
Constant width italic
-
Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.
Tipp
Dieses Symbol steht für einen Tipp, eine Anregung oder einen allgemeinen Hinweis.
Hinweis
Dieses Symbol steht für einen allgemeinen Hinweis.
Warnung
Dieses Symbol weist auf eine Warnung oder Vorsicht hin.
Safari® Bücher Online
Hinweis
Safari Books Online ist eine digitale On-Demand-Bibliothek, die Experteninhalte in Buch- und Videoform von weltweit führenden Autoren aus den Bereichen Technologie und Wirtschaft liefert.
Technologieexperten, Softwareentwickler, Webdesigner sowie Geschäfts- und Kreativprofis nutzen Safari Books Online als Hauptressource für Recherchen, Problemlösungen, Lernen und Zertifizierungsschulungen.
Safari Books Online bietet eine Reihe von Plänen und Preisen für Unternehmen, Behörden, Bildungseinrichtungen und Privatpersonen.
Mitglieder haben Zugang zu Tausenden von Büchern, Schulungsvideos und Manuskripten von Verlagen wie O'Reilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology und Hunderten mehr in einer vollständig durchsuchbaren Datenbank. Wenn du mehr über Safari Books Online erfahren möchtest, besuche uns bitte online.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-998-9938 (in den Vereinigten Staaten oder Kanada)
- 707-829-0515 (international oder lokal)
- 707-829-0104 (Fax)
Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter http://bit.ly/reactive-prog-with-rxjava aufrufen .
Wenn du Kommentare oder technische Fragen zu diesem Buch stellen möchtest, sende eine E-Mail an bookquestions@oreilly.com.
Weitere Informationen zu unseren Büchern, Kursen, Konferenzen und Neuigkeiten findest du auf unserer Website unter http://www.oreilly.com.
Finde uns auf Facebook: http://facebook.com/oreilly
Folge uns auf Twitter: http://twitter.com/oreillymedia
Schau uns auf YouTube: http://www.youtube.com/oreillymedia
Danksagungen
Von Ben
Dieses Buch gäbe es nicht ohne Tomasz, der den größten Teil des Buches geschrieben hat, und Nan Barber, unsere Lektorin, die unglaublich hilfreich und geduldig war, um uns ans Ziel zu bringen. Vielen Dank, Tomasz, dass du auf meine Nachricht auf Twitter, in der ich nach einem Autor gesucht habe, geantwortet und dieses Buch Wirklichkeit werden lassen hast!
Ich bin auch sehr dankbar für die Unterstützung, die Netflix Open Source und Daniel Jacobson mir persönlich und dem Projekt im Allgemeinen über die Jahre gegeben haben. Sie waren großartige Förderer des Projekts und der immensen Menge an Zeit, die ich in die Community investiert habe. Vielen Dank dafür!
Und danke Erik, dass du Rx entwickelt hast, mir so viel beigebracht hast und dir die Zeit genommen hast, das Vorwort zu diesem Buch zu schreiben.
Von Tomasz
Zuallererst möchte ich mich bei meinen Eltern bedanken, die mir vor fast 20 Jahren meinen ersten Computer geschenkt haben (486DX2 mit 8 MB Arbeitsspeicher: das vergisst man nie). So begann meine Reise mit dem Programmieren. Mehrere Personen haben zur Entstehung dieses Buches beigetragen. Angefangen bei Ben, der sich bereit erklärt hat, das erste und letzte Kapitel zu schreiben und meine Inhalte zu überprüfen.
Apropos Rezensenten: Venkat Subramaniam hat sich sehr darum bemüht, dieses Buch sinnvoll und einheitlich zu strukturieren. Er schlug oft eine andere Reihenfolge von Sätzen, Absätzen und Kapiteln vor oder entfernte sogar ganze Seiten mit irrelevantem Inhalt. Unser anderer Rezensent war der äußerst sachkundige und erfahrene Dávid Karnok. Als Projektleiter von RxJava entdeckte er Dutzende von Bugs, Race Conditions, Inkonsistenzen und andere Probleme. Beide Reviewer lieferten Hunderte von Kommentaren, die die Qualität dieses Buches erheblich verbesserten. In der sehr frühen Phase dieses Buches haben viele meiner Kollegen das Manuskript gelesen und ebenfalls sehr wertvolles Feedback gegeben. Ich möchte mich bedanken: Dariusz Baciński, Szymon Homa, Piotr Pietrzak, Jakub Pilimon, Adam Wojszczyk, Marcin Zajączkowski, und Maciej Ziarko.
Get Reaktive Programmierung mit RxJava now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.