私はこれらの高レベルの同時実行パラダイムにまったく慣れておらず、scala RXバインディングを使い始めました。それで、RXがRabbitMQやZeroMQなどのメッセージングキューとどのように異なるかを理解しようとしていますか?
どちらもサブスクライブ/パブリッシュパラダイムを使用しているようです。どこかで、RXがRabbitMQ上で実行されているというツイートを見ました。
RXとメッセージングキューの違いを誰かが説明できますか?なぜ私はどちらかを選択するのですか?一方を他方に置き換えることはできますか、それとも相互に排他的ですか?それらはどの領域で重複していますか?
[system.reactive]
タグの 詳細 リンクをクリックする価値があります。そこにかなりの情報を入れます!
イントロから、Rxはメッセージキューイングテクノロジーではないことがわかります。
Reactive Extensions(Rx)は、監視可能なシーケンスとLINQスタイルのクエリ演算子を使用して非同期のイベントベースのプログラムを作成するためのライブラリです。 System.Reactiveは、ライブラリを通じて使用されるルート名前空間です。開発者はRxを使用して、LINQ演算子を使用して非同期データストリームを表現し、スケジューラーを使用して非同期データストリームの同時実行性をパラメーター化します。簡単に言えば、Rx = Observables + LINQ + Schedulersです。
したがって、Rxとメッセージキューは、互いに非常によく補完できる非常に別個のテクノロジーです。典型的な例は株価ティッカーサービスです。これはメッセージキューを介して配信される場合がありますが、Rxによって価格のグループ化、集計、フィルタリングに変換されます。
さらに先に進むことができます。EntityFrameworkがIQueryable<T>
クエリをデータベース上で直接実行されるSQLに変換するのと同じように、Rx IQbservable<T>
クエリをネイティブクエリに変換するプロバイダーを作成できます(例:Where
)。 filterは、多くのメッセージキューイングテクノロジに存在するネイティブフィルタリング機能を利用して、フィルタを直接適用する場合があります。しかし、これは非常に多くの作業であり、大変です。
メッセージキューメッセージがRxSubject
に送られるのを見るのははるかに簡単で、珍しいことではありません。これにより、キューからの着信メッセージがRxストリームに変換され、クライアントで簡単に利用できるようになります。 RxはGUIでも広く使用されており、ボタンの押下やテキストボックスの変更などのクライアント側のイベントを処理して、非同期サーバークエリによるドラッグアンドドロップやテキストのオートコンプリートなどの従来の困難なシナリオを劇的に簡単にします。後のシナリオをカバーする優れた実習ラボがあります ここ 。これはRxの初期リリースに対して作成されましたが、それでも非常に関連性があります。
Bart de Smetによるこのビデオプレゼンテーションで素晴らしいイントロをご覧になることをお勧めします: リアクティブエクステンション(Rx)を使用したイベント処理ブルースのキュアリング -Kinectからのライブフィードにクエリを書き込む従来のRxデモを含む手を振るのを解釈する!
RXとこれらの他のメッセージングキューの違いを誰かが説明できますか?
Rxは、単にイベント(あらゆる種類のイベント!)を抽象化したものです。分散キューからメッセージを受信するisイベント、そして多くの場合、ZeroMQ/RabbitMQソリューションは、さまざまなイベントをかなり使用して組み合わせる必要があります。これは、Rxが非常に得意です。
多くの場合、RxはZeroMQ/RabbitMQアプリの作成を他の方法よりもはるかに簡単にします:)