30

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

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

これらの非同期リクエストについては、マップされた URL でリッスンするサーブレットがリクエストをキューに発行するように計画しています。次に、コンシューマは各リクエストをデキューし、適切なハンドラにルーティングします。これは、機能する場合と機能しEventBusない場合がある場所です。要求を正しいハンドラーにルーティングするためのビジネス ロジックは非常に複雑です。通常は Camel ルートが最適なソリューションです。私の使用例では、一連の「プロセッサ」(イベント ハンドラ) を同じイベント バスに接続し、最終結果が生産された。

私はすでに Apache Camel を使用して調査したこと、そして Camel がここでの仕事に適したツールであると信じていることを言いたいと思います。残念ながら、この質問の範囲外の理由により、使用しません。それで、私はラクダのようなソリューションを思いつき始めました。これが、グアバのEventBus. しかし、それは適切な代替品ではないかもしれません。

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

4

1 に答える 1

51

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

「特定の種類のイベントに関心のあるコードに、イベントを発行するコードとそれを受信するコードを直接結合することなく、それらのイベントが発生したときに通知するための簡単で一元化された方法が必要です。」

「リクエストを正しいハンドラーにルーティングするためのビジネス ロジックは非常に複雑です」と言うとき、それは Java オブジェクト クラスのみに基づいてルーティングされるため、探しているものではないのではないかと思います (ただし、いくつかの凝った処理を行うことはできます)EventBusイベント クラスにインターフェイスを実装し、サブスクライバーが特定のインターフェイスにサブスクライブするようにします)。

于 2013-02-07T23:14:50.700 に答える