4

バックグラウンドで長い計算を実行する必要があるアプリケーションを書いているので、基本的に次のワークフローがあります。

  1. クライアントはエッジ「ディスパッチャー」サーバーにジョブを送信します。
  2. Dispatcher サーバーがジョブをメッセージ キューに送信します。
  3. 計算サーバーがジョブをプルして作業を開始します。

計算サーバーは、クライアントが進行状況を監視できるように、作業のステータスに関するライブ フィードバックも提供します。

私が現在抱えている主な問題は、キューに送信されたメッセージの一意のジョブ ID を取得する方法と、メッセージを処理したサーバーを事後に把握することです。ジョブが最初に送信されると (ステップ 1)、クライアントはジョブを識別する一意のトークンを受け取る必要があります。クライアントは、ディスパッチャ サーバーを定期的にポーリングして、トークンが開始されているかどうかのステータスを確認できる必要があります。

計算サーバーが要求を処理した後、クライアントはポーリング呼び出しでエンコーダー サーバーの DNS アドレスまたは IP アドレスを取得する必要があります。

どうすればこれを実現できますか? メッセージ キューは、キュー内のメッセージごとに一意の識別トークンというこの概念を提供しますか?

4

2 に答える 2

13

結局のところ、RabbitMQはメッセージに固有の id を実際に付与します。これは、私が作成しようとしている種類のアプリケーションである RPC アプリケーションで特に役立ちます。各メッセージには、correlationIdそれを一意に識別する がありcallback、ジョブが完了したとき、または実際にはいつでも元のサーバーに通知する を提供できます。

于 2012-07-12T22:50:49.920 に答える
0

java.util.UUIDクラスを使用して、普遍的に一意の識別子を生成できます。

サンプルコード:

UUID uuid = UUID.randomUUID();
System.out.println("UUID: " + uuid.toString());

出力例:UUID: d5a43450-2321-40ac-9746-9cf5d7447aca

メッセージ キューの部分については、車輪の再発明を避けるために、最初に JMS ベースのソリューションを確認することをお勧めします。多くの選択肢があります。

于 2012-07-12T20:31:55.063 に答える