web-dev-qa-db-ja.com

イベントバスを使用するタイミング

私は新しいJava Webアプリのバックエンドを設計していて、イベントバスを使用するかどうかを決定しようとしています;特に Guava EventBus =。

ほとんどのサーバー側リクエストは同期的です。つまり、ユーザーがデータをリクエストしていて、数秒以内に応答が必要です。ただし、非同期になる可能性があり、クライアント側で「ファイアアンドフォーゲット」である要求もかなり多くあります。それらが最終的に処理される限り、クライアントが処理に2秒または2時間かかる場合、クライアントはあまり気にすることができません。

これらの非同期要求については、マップされたURLでリッスンするサーブレットが要求をキューにパブリッシュすることを計画しています。次に、コンシューマは各リクエストをデキューして、適切なハンドラにルーティングします。ここでEventBusを使用してもしなくてもかまいません。要求を正しいハンドラーにルーティングするためのビジネスロジックはかなり複雑です。通常、ラクダのルートが最適なソリューションです。私のユースケースでは、一連の「プロセッサ」(イベントハンドラー)を同じイベントバスに接続し、最終的な結果が得られるまで、お互いにイベントを発生させたり受信したりできるかどうか疑問に思っています。生産。

私はすでにApache Camelを使用して探索しており、Camelがここでの仕事に適したツールであると確信しています。悲しいことに、この質問の範囲外の理由で、私はそれを使用しません。それで私はキャメルのような解決策を思いだし始めました、それは私がグアバのEventBusに到着した方法です。しかし、それは適切な代替品ではないかもしれません。

問題の分類を探していると思いますが、Event Busパターンが解決し、それがここで私のユースケースに一致するかどうかを判断する必要があります。

25
IAmYourFaja

EventBusが一言で解決する問題ステートメントは次のとおりです。

「特定のタイプのイベントに関心のあるコードに、イベントを発行するコードとそれを受け取るコードを直接結合することなく、それらのイベントが発生したときに簡単かつ一元的に通知する方法が欲しい。」

「リクエストを正しいハンドラーにルーティングするためのビジネスロジックはかなり複雑です」と言うと、私はsuspectEventBusは、 on Javaオブジェクトクラスのみ(ただし、イベントクラスにインターフェイスを実装し、サブスクライバに特定のインターフェイスをサブスクライブさせることで、いくつかの手の込んだことができます)。

43
ColinD