2017-04-07 1 views
2

サーバー(tomcat)に というデストラベースのアプリケーションがデプロイされています。すべてのリクエストはサーバーに送信され、サービスに1秒かかることがあります。要求すると、どのサーバを非応答性にするかを提供することができる。今私は、サーバーがリクエストを引き出し、そのリクエストを処理してピック・タイムの問題を処理できるように、リクエストをキューに格納できるかどうかを考えていました。私の残りのWEBSERVICEでKafkaキューを使用できますか

私はカフカがこれに役立つと思っていました。

答えて

0

あなたのケースではApache Kafkaが役に立ちます。カフカブローカーを使用している場合は、要求のピークに直面することができます。要求はあなたが言及したようにキューに格納され、独自の速度でサーバーによって処理されます。

あなたがtomcatを使用しているので、私はあなたのサーバーをJavaで開発したと思います。 Apache Kafkaは非常に使いやすいJava APIを提案しています。

+0

Rabbitmqも使えると思います。 –

2

あなたはKafka(またはこの元のActiveMQ、RabbitMQなどの他のメッセージングシステム)を使用できます。 WebServiceが要求を受信すると、(カフカのメッセージプロデューサdetailsを使用して)カフカキューに(それを処理するために必要なすべての詳細を)要求を追加

(カフカの消費者detailsを持つ)別のサービスは、トピック(キュー)から読み込まれますし、それを処理する。

要求が処理されたときにクライアントにメッセージを送信する必要がある場合、サーバーはWebSocketを使用してクライアントに情報をプッシュすることができます(クライアントは要求ステータスをポーリングできますが、このステータスエンドポイントを要求し、

+0

ありがとうKaushal for inputs、しかし同じソースが複数の呼び出しを発しているので、どのように同じ呼び出しに応答を送ることができます。オプションの – Vawani

+0

一つは、サーバ(またはIDを作成し、それに応答して送信することができ、サーバーへのリクエストを送信するときに、クライアントに要求ID(X-リクエスト-IDまたはX-相関-ID)を設定することができ、ある、要求のステータスを追跡するために使用されます)。このリクエストがカフカのトピックからデキューされ(カフカメッセージの一部としてリクエストIDを保存することを保証する)、処理された場合、websocketを使用してサーバーからメッセージを送信します。サーバーからプッシュされたメッセージの一部としてリクエストIDを含めます。このようにして、クライアントは、どのHTTP要求に対してどのWebソケットフレームが送信されたかを関連付けることができます。 – Kaushal

+0

代替オプション(但しない最適解)クライアントは別のHTTP呼び出しでポーリングすることができます(慎重にそれが不要なHTTPリクエストがまだ処理されている要求またはキュー内の原因になります)。このオプションは、サーバーからのプッシュ通知にwebsocketを実装しない場合に機能します。 – Kaushal

関連する問題