Reaktivní proudy - Reactive Streams
První vydání | 15. května 2015 |
---|---|
Stabilní uvolnění | 1.0.3 / 23. srpna 2019 |
Úložiště | github |
Napsáno | Java (Scala, Groovy, Kotlin), .NET |
webová stránka | reaktivní proudy |
Reaktivní proudy je iniciativa na poskytnutí a Standard pro asynchronní zpracování proudu s neblokující protitlak.[1]
Původ
Reaktivní proudy začaly jako iniciativa koncem roku 2013 mezi inženýry v Netflix, Stěžejní a Lightbend. Některé z prvních diskusí začaly v roce 2013 mezi Hrát si a Akka týmy v Lightbendu.[2][3] Lightbend je jedním z hlavních přispěvatelů Reactive Streams.[4] Mezi další přispěvatele patří červená čepice, Věštec, Cvrlikání a spray.io.[5]
Cíle
Hlavním cílem reaktivních proudů je řídit výměnu dat proudu přes asynchronní hranici - jako předávání prvků jinému vlákno nebo pool vláken - a přitom zajistit, aby přijímající strana k tomu nebyla nucena nárazník libovolné množství dat. Jinými slovy, protitlak je nedílnou součástí tohoto modelu, aby umožnil fronty které zprostředkovávají mezi vlákny ohraničený.
Záměrem specifikace je umožnit vytvoření mnoha vyhovujících implementace, které na základě dodržování pravidel budou moci spolupracovat plynule, se zachováním zmíněných výhod a charakteristik v celém grafu zpracování streamované aplikace. Volně dostupný Sada pro technologickou kompatibilitu[6] byl vyvinut společně se specifikací, která umožňuje implementátorům specifikace ověřit, zda pokrývají všechna pravidla a požadavky, včetně kontrol potenciálních závodních podmínek.
Rozsah reaktivních proudů je minimální sada rozhraní, metody a protokoly, které popisují nezbytné operace a entity k dosažení asynchronních toků dat s neblokujícím zpětným tlakem. Koncový uživatel DSL nebo vazba protokolu API záměrně byly vynechány z rozsahu, aby podporovaly a umožňovaly různé implementace, které potenciálně používají různé programovací jazyky, aby zůstaly co nejvěrnější idiomům jejich platformy.
Zahrnutí do standardu Java
Specifikace byla vyvinuta se záměrem budoucího zahrnutí do oficiální standardní knihovny Java, pokud se osvědčí a bude přijata dostatečným množstvím knihoven a prodejců.
Reaktivní proudy byly navrženy tak, aby se staly součástí Jáva 9 od Doug Lea, vůdce JSR 166[7] jako nová třída Flow[8] který by zahrnoval rozhraní aktuálně poskytovaná Reactive Streams.[4][9] Po úspěšném vydání 1.0 Reactive Streams a rostoucím přijetí byl návrh přijat a Reactive Streams byl zahrnut do JDK9 přes JEP -266.[9]
Přijetí
Dne 30. Dubna 2015 verze 1.0.0 Reactive Streams pro JVM byl vydán,[4][5][10] počítaje v to Java API,[11] textový Specifikace,[12] A TCK a příklady implementace. Dodává se s řadou kompatibilních implementací ověřených TCK pro 1.0.0, uvedených v abecedním pořadí:[10]
- Akka Proudy[13][14]
- MongoDB[15]
- Ratpack[16]
- Reactive Rabbit - ovladač pro RabbitMQ /AMQP
- Jaro a Stěžejní Projektový reaktor[17]
- Netflix RxJava[18]
- Úhledný 3.0[19][20]
- Vert. X 3.0[21]
Mezi další implementace patří Cassandra,[22] Elasticsearch,[23] Apache Kafka,[24] Parallel Universe Quasar,[25] Hrajte Framework,[26] Armeria.[27]
Jaro 5 bylo oznámeno, že bude postaveno na Reactor Streams kompatibilním s Reactor Core.[28]
Amazon oznámil, že jeho Webové služby Amazon SDK by podporovalo Reactive Streams, aby poskytovalo možnosti streamování ve svých klientských knihovnách ve verzi 2.0.[29]
Reactive Streams 1.0.1 je vydán 9. srpna 2017, včetně různých vylepšení v přesnosti specifikace, vylepšení TCK a dalších vysvětlení. Specifikace stejně jako rozhraní zůstala plně zpětně kompatibilní s verzí 1.0.0, avšak jejím cílem bylo zjednodušit přijetí pro budoucí implementátory a sladit s některými dalšími požadavky stanovenými OpenJDK.[30]
Přístavy a vlivy
- Přímý port specifikace, rozhraní a TCK byl pro stejnou pracovní skupinu zpřístupněn pro .SÍŤ plošina.[31]
- Když Elixír Jazyk představil své streamovací API s názvem GenStage, autoři rozšířili poděkování „[ak] projektům akka-streams a reactive-streams, které nám poskytly vodítko při implementaci výměny na základě poptávky mezi fázemi“.[32]
Reference
- ^ reactive-streams.org
- ^ Cesta do reaktivních proudů
- ^ Reaktivní proudy 1.0.0 rozhovor
- ^ A b C Reactive Streams vydává první stabilní verzi pro JVM
- ^ A b Reactive Streams 1.0.0 - nový standard v reaktivním zpracování dat
- ^ „Reaktivní proudy TCK“.
- ^ jdk9 Třídy kandidátů Flow a SubmissionPublisher
- ^ java.util.concurrent.Flow
- ^ A b JEP 266: Další aktualizace souběžnosti
- ^ A b Reactive Streams 1.0.0 je tady!
- ^ Java API
- ^ Reaktivní proudy pro specifikaci JVM
- ^ InfoQ: Reaktivní proudy s proudy Akka
- ^ Principy designu za akka streamy
- ^ Ovladač Java MongoDB Reactive Streams
- ^ Ratpack: API Reactive Streams
- ^ Reactor 2.0.0.RC1 s nativní podporou Reactive Streams je nyní k dispozici!
- ^ Advanced RxJava: The Reactive-Streams API (part 1)
- ^ Slick 3: Reactive Streams for Asynchronous Database Access in Scala
- ^ Úhledný 3.0.0
- ^ Integrace reaktivních proudů Vert.x.
- ^ Reaktivní přístup ke Cassandře
- ^ elastic4s - neblokující, zadejte bezpečný klient DSL a Scala pro Elasticsearch
- ^ Reaktivní proudy pro Apache Kafka
- ^ Kvazar a reaktivní proudy
- ^ Play Framework - integrace reaktivních streamů (experimentální)
- ^ Armeria - zcela asynchronní a reaktivní
- ^ Reaktivní jaro
- ^ „Oznámení AWS SDK pro vývojáře Java 2.0“.
- ^ „Oznámení o vydání reaktivních proudů 1.0.1“.
- ^ „Reaktivní proudy .NET“.
- ^ „Blog Elixir: Announcing GenStage“.
- Tento článek včlení text od www
.reaktivní proudy , který je vydán pod CC0 1.0 Universal (CC0 1.0) Public Domain Dedication..org