Strumienie reaktywne
Pierwsze wydanie | 15 maja 2015 |
---|---|
Wersja stabilna | 1.0.3 / 23 sierpnia 2019
|
Magazyn | |
Napisane w | Java (Scala, Groovy, Kotlin), .NET |
Strona internetowa |
Reactive Streams to inicjatywa mająca na celu zapewnienie standardu asynchronicznego przetwarzania strumieni z nieblokującym przeciwciśnieniem.
Pochodzenie
Usługa Reactive Streams powstała pod koniec 2013 roku z inicjatywy inżynierów z firm Netflix , Pivotal i Lightbend . Niektóre z najwcześniejszych dyskusji rozpoczęły się w 2013 roku pomiędzy Play i Akka w Lightbend. Lightbend jest jednym z głównych twórców Reactive Streams. Inni współautorzy to Red Hat , Oracle , Twitter i spray.io.
Cele
Głównym celem strumieni reaktywnych jest zarządzanie wymianą danych strumieniowych przez granicę asynchroniczną – na przykład przekazywanie elementów do innego wątku lub puli wątków – przy jednoczesnym zapewnieniu, że strona odbierająca nie jest zmuszona do buforowania dowolnych ilości danych. Innymi słowy, przeciwciśnienie jest integralną częścią tego modelu, aby umożliwić ograniczenie kolejek pośredniczących między wątkami .
Zamierzeniem specyfikacji jest umożliwienie stworzenia wielu zgodnych implementacji , które dzięki przestrzeganiu zasad będą mogły płynnie współdziałać , zachowując wspomniane korzyści i cechy na całym grafie przetwarzania aplikacji strumieniowej. Wraz ze specyfikacją opracowano ogólnodostępny zestaw zgodności technologii , który umożliwia osobom wdrażającym specyfikację sprawdzenie, czy uwzględniły wszystkie zasady i wymagania, w tym sprawdzenie potencjalnych warunków wyścigowych.
Zakres Reactive Streams to minimalny zestaw interfejsów , metod i protokołów opisujących niezbędne operacje i podmioty, aby uzyskać asynchroniczne strumienie danych z nieblokującym przeciwciśnieniem. DSL użytkownika końcowego lub interfejsy API wiążące protokoły celowo pominięto w zakresie, aby zachęcić i umożliwić różnym implementacjom, które potencjalnie korzystają z różnych języków programowania, zachowanie jak największej wierności idiomom ich platformy.
Włączenie do standardu Java
Specyfikacja opracowana z zamiarem włączenia w przyszłości do oficjalnej biblioteki standardowej Java, jeśli okaże się skuteczna i zostanie przyjęta przez wystarczającą liczbę bibliotek i dostawców.
Doug Lea , lider JSR 166, zaproponował, aby Reactive Streams stały się częścią Java 9 jako nowa klasa Flow, która obejmowałaby interfejsy obecnie dostarczane przez Reactive Streams. Po udanym wydaniu Reactive Streams w wersji 1.0 i rosnącym zastosowaniu, propozycja została zaakceptowana i Reactive Streams zostały włączone do JDK9 poprzez JEP -266.
Przyjęcie
30 kwietnia 2015 została wydana wersja 1.0.0 Reactive Streams dla JVM , zawierająca Java API , specyfikację tekstową , TCK i przykłady implementacji. Zawiera wiele zgodnych implementacji zweryfikowanych przez TCK dla wersji 1.0.0, wymienionych w kolejności alfabetycznej:
- Strumienie Akki
- MongoDB
- Ratpack
- Reactive Rabbit – sterownik dla RabbitMQ / AMQP
- Reaktor projektu Spring and Pivotal
- NetflixRxJava _
- Zgrabny 3.0
- Vert.x 3.0
- Bunt
- Helidon
Inne implementacje obejmują Cassandra , Elasticsearch , Apache Kafka , Parallel Universe Quasar, Play Framework , Armeria.
Spring 5 będzie zbudowany na rdzeniu reaktora kompatybilnym ze strumieniami Reactive.
Amazon ogłosił, że jego zestaw SDK Amazon Web Services będzie obsługiwał strumienie reaktywne, aby zapewnić możliwości przesyłania strumieniowego w bibliotekach klienckich w wersji 2.0.
Wersja Reactive Streams 1.0.1 została wydana 9 sierpnia 2017 r. i zawierała różne ulepszenia w zakresie precyzji specyfikacji, ulepszenia TCK i inne wyjaśnienia. Specyfikacja oraz interfejsy pozostały w pełni kompatybilne wstecz z wersją 1.0.0, jednakże miały na celu usprawnienie przyjęcia dla przyszłych implementatorów, a także dostosowanie się do niektórych dodatkowych wymagań określonych przez OpenJDK.
Porty i wpływy
- .NET udostępniono bezpośredni port specyfikacji, interfejsów i TCK .
- Kiedy w języku Elixir wprowadzono interfejs API przesyłania strumieniowego o nazwie GenStage, autorzy złożyli podziękowania „[do] projektów akka-streams i reactive-streams, które dostarczyły nam wskazówek dotyczących wdrażania wymiany między etapami opartej na popycie”.
-
Ten artykuł zawiera tekst z
witryny www.reactive-streams.org , która jest udostępniana na licencji CC0 1.0 Universal (CC0 1.0) Public Domain Dedication .