| 初回リリース | 2015年5月15日 |
|---|---|
| 安定版リリース | 1.0.3 / 2019年8月23日 |
| リポジトリ | github.com/reactive-streams/reactive-streams-jvm |
| 書かれた | Java (Scala、Groovy、Kotlin)、.NET |
| Webサイト | リアクティブストリーム |
Reactive Streamsは、非ブロッキングバックプレッシャーを備えた非同期ストリーム処理の標準を提供する取り組みです。[1] [2]
起源
Reactive Streamsは、2013年後半にNetflix、Pivotal、Lightbendのエンジニアの間で始まった取り組みです。最も初期の議論のいくつかは、2013年にLightbendのPlayチームとAkkaチームの間で始まりました。[3] [4] LightbendはReactive Streamsの主要な貢献者の1つです。[5]他の貢献者には、Red Hat、Oracle、Twitter、spray.ioなどがあります。[6]
目標
Reactive Streams の主な目的は、 受信側が任意の量のデータをバッファリングすることを強制されないよう保証しながら、非同期境界を越えたストリーム データの交換 (要素を別のスレッドまたはスレッド プールに渡すなど) を管理することです。言い換えると、バック プレッシャーは、スレッド間を仲介するキューを制限できるようにするために、このモデルの不可欠な部分です。
この仕様の目的は、多くの準拠実装の作成を可能にすることです。これらの実装は、ルールを遵守することでスムーズに相互運用でき、ストリームアプリケーションの処理グラフ全体にわたって前述の利点と特性を維持できます。仕様と同時に、無料で利用できるテクノロジー互換性キット[7]が開発され、仕様の実装者は、潜在的な競合状態のチェックを含むすべてのルールと要件をカバーしているかどうかを確認できます。
Reactive Streams のスコープは、非ブロッキングバックプレッシャーによる非同期データストリームを実現するために必要な操作とエンティティを記述するインターフェース、メソッド、プロトコルの最小限のセットです。 [2] エンドユーザー DSLまたはプロトコルバインディングAPI は、プラットフォームのイディオムに可能な限り忠実であり続けるために、異なるプログラミング言語を使用する可能性のあるさまざまな実装を奨励および可能にするために、意図的にスコープから除外されています。
Java標準への組み込み
この仕様は、成功が証明され、十分な数のライブラリとベンダーによって採用された場合に、将来的に公式の Java 標準ライブラリに組み込むことを目的として開発されました。
Reactive Streamsは、 JSR 166 [8]のリーダーであるDoug Leaによって、現在Reactive Streamsによって提供されているインターフェースを含む新しいFlowクラス[9]としてJava 9に組み込むことが提案されました。 [5] [10] Reactive Streamsの1.0リリースが成功し、採用が拡大した後、提案は受け入れられ、Reactive StreamsはJEP -266を介してJDK9に組み込まれました。[10]
採択
2015年4月30日、Reactive Streams for the JVMのバージョン1.0.0がリリースされました。[5] [6] [11]にはJava API、[12]テキスト仕様、[13] TCK 、実装例が含まれています。1.0.0に対してTCKによって検証された多数の準拠実装が付属しており、アルファベット順にリストされています。[11]
- アッカストリーム[14] [15]
- モンゴDB [16]
- ラットパック[17]
- Reactive Rabbit – RabbitMQ / AMQP用ドライバー
- スプリング[2]とピボタルプロジェクトリアクター[18]
- ネットフリックスRxJava [19]
- スリック3.0 [20] [21]
- ヴァート.x 3.0 [22]
- 反乱
- ヘリドン
その他の実装としては、Cassandra、[23] Elasticsearch、[24] Apache Kafka、[25] Parallel Universe Quasar、[26] Play Framework、[27] Armeriaなどがあります。[28]
Spring 5はReactive Streams互換のReactor Core上に構築されることが発表された。[29]
Amazonは、Amazon Web Services SDKのバージョン2.0でReactive Streamsをサポートし、クライアントライブラリにストリーミング機能を提供すると発表した。 [30]
Reactive Streams 1.0.1は2017年8月9日にリリースされ、仕様の精度、TCKの改善、その他の明確化など、さまざまな改善が行われました。仕様とインターフェースは1.0.0バージョンと完全に下位互換性を保ちましたが、将来の実装者のために採用を合理化し、OpenJDKによって設定されたいくつかの追加要件に準拠することを目指しました。[31]
港と影響
- 仕様、インターフェース、TCKの直接移植は、同じワーキンググループの下で.NETプラットフォーム向けに提供されました。[32]
- Elixir言語がGenStageと呼ばれるストリーミングAPIを導入したとき、著者らは「ステージ間の需要主導型の交換を実装するためのガイダンスを提供してくれたakka-streamsとreactive-streamsプロジェクトに」感謝の意を表した。[33]
引用
- ^ リアクティブストリーム.org
- ^ abc Walls 2019、pp. 243–245、§10.1.1 リアクティブストリームの定義。
- ^ リアクティブストリームへの旅
- ^ Reactive Streams 1.0.0 インタビュー
- ^ abc Reactive Streams が JVM 向けの最初の安定バージョンをリリース
- ^ ab Reactive Streams 1.0.0 – リアクティブデータ処理の新しい標準
- ^ 「Reactive Streams TCK」。GitHub。
- ^ 「jdk9 候補クラス Flow および SubmissionPublisher」。2015 年 1 月 20 日時点のオリジナルよりアーカイブ。2015 年 12 月 23 日閲覧。
- ^ "java.util.concurrent.Flow". 2016年2月3日時点のオリジナルよりアーカイブ。2015年12月23日閲覧。
- ^ ab JEP 266: 並行性に関するさらなるアップデート
- ^ ab Reactive Streams 1.0.0 がリリースされました!
- ^ Java API
- ^ JVM 仕様の Reactive Streams
- ^ InfoQ: Akka Streams を使用したリアクティブ ストリーム
- ^ 「Akka Streams の設計原則」。2016 年 1 月 12 日時点のオリジナルよりアーカイブ。2015 年 12 月 23 日閲覧。
- ^ MongoDB リアクティブ ストリーム Java ドライバー
- ^ Ratpack: リアクティブ ストリーム API
- ^ ネイティブ Reactive Streams をサポートする Reactor 2.0.0.RC1 が利用可能になりました。
- ^ 上級 RxJava: Reactive-Streams API (パート 1)
- ^ Slick 3: Scala での非同期データベース アクセスのためのリアクティブ ストリーム
- ^ スリック 3.0.0
- ^ Vert.x リアクティブストリームの統合
- ^ リアクティブに Cassandra にアクセスする
- ^ elastic4s — Elasticsearch 用の非ブロッキング、型安全な DSL および Scala クライアント
- ^ Apache Kafka のリアクティブ ストリーム
- ^ 「Quasar and Reactive Streams」。2015年10月4日時点のオリジナルよりアーカイブ。2015年12月24日閲覧。
- ^ Play Framework — Reactive Streams 統合 (実験的)
- ^ Armeria - 完全に非同期かつリアクティブ
- ^ リアクティブスプリング
- ^ 「AWS SDK for Java 2.0 開発者プレビューのお知らせ」。
- ^ 「Reactive Streams 1.0.1 リリースのお知らせ」。
- ^ 「Reactive Streams .NET」。GitHub。
- ^ “Elixir ブログ: GenStage の発表”.
