2

アプリケーションのアーキテクチャをセットアップしようとしています。これは私たちにとって初めてのことです。このアプリケーションはエンドユーザーと対話するものではなく、内部計算の目的のためのものです。DBServerとして1つのデータベース名を持つリモート(Ms sqlサーバーazure)がありますDBTesting。でデータが変更されるたびにDBTesting、Java アプリケーション名が としてトリガーされApp1ます。

質問1:

トリガーする可能性は何ですかApp1

では、言語で書かれたファイルをApp1実行しています。評価には 20 分かかります。が20 分で何度も変更されると、その数のリクエストが から に送信されます。しかし、一度にこれ以上の数のリクエストを処理したくないので、キュー ベースでトリガーしたいと考えています。前のリクエストが完了すると、キューのみが次の HTTP リクエストで解放されます。.exeCDBTestingDBTestingApp1App1Http

質問2:

Javaまたは他のテクノロジーを使用してこれを実装する方法はありますか

データベースとこのリンクをやり取りしています

ユーザー名 : MyUserName

パスワード : MyPassword

これらを1週間から修正しようとしていますが、どの方法が良いかわかりません。

私の要件に適したチュートリアルを誰かに提案してもらえますか。

ありがとう。

4

2 に答える 2

1

キューイングには Active-MQ を使用できます。アクティブ MQ、ハローワールド

MSSQL サービス ブローカを使用している場合は、すでにメッセージ キューが提供されています。自分の場合に適切に使用する方法を理解する必要があるだけです。

これはService Broker to JMS bridge へのリンクです。

  • データベース経由でアプリケーションを呼び出す必要はありません。
  • C プログラムは、各 HttpRequest を処理するのに 20 分かかります。

次の手順を使用します。

パート1:

  • p1.1 - MSSQL サービス ブローカーを使用してキューをセットアップします。
  • p1.2 - データベースが変更されるたびに、キューにメッセージを送信します。

パート2:

  • p2.1 - キューをポーリングし、メッセージがあるかどうかをチェックする Java プログラムを用意します。
  • p2.2 - メッセージがない場合、しばらくスリープします。
  • p2.3 - 新しいメッセージがある場合は、1 つだけ取得します。
  • p2.4 - メッセージは、Java プログラムによって C プログラムに渡されます (「プロセス ビルダー」を参照)。
  • p2.5 - プロセスが完了するまで待ちます。
  • p2.6 - プロセスが完了したら (20 分後)、p2.1 に進みます。

このリンクは間接的に役立つ場合があります。

Azure は Service Broker をサポートしていないため、part1 を実装するには別の方法が必要です。


Part1 (可能な方法で以下の手順を実装):

  • ステップ 1. データベースが変更されたときに、要求データ (メッセージではなく、データのみ) を生成します。

    I want to send modified or new data with request from DB to Java Application

    • データベースが変更されたときに、データがどのように/どこで生成/収集されるかを知る必要があります。このステップではこれだけです。これが明確になったら、次に進みます。一歩ずつ進んでください。-
  • ステップ 2. 生成されたデータからメッセージを作成します。

  • ステップ 3. メッセージを読み取り、キューに送信します。

    send messages including data to Queue

    メッセージ構造:

    次のメッセージは を指していApplication1ます。

     App1?data="1,2,3,4,5,6,7,8,9,10..."
    

    次のメッセージは を指していApplication2ます。

     App2?data="1,2,3,4,5,6,7,8,9,10..."
    

    If it allow to mention our own custom message,then I will create one more table in DB.This table have 2 columns.1 row points to ApplicationName and 2 row points to message Name.It is useful while forwarding time.

パート 2 (現在は同じまま):

  • p2.1 - キューをポーリングし、メッセージがあるかどうかをチェックする Java プログラムを用意します。
  • p2.2 - メッセージがない場合、しばらくスリープします。
  • p2.3 - 新しいメッセージがある場合は、1 つだけ取得します。
  • p2.4 - Java アプリケーションは XML ファイルをインポートし、メッセージ コンテキストに基づいて、対応するアプリケーションにデータを含む HTTP 要求を送信します。
  • p2.5 - メッセージは、Java プログラムによって C プログラムに渡されます (「プロセス ビルダー」を参照)。
  • p2.6 - プロセスが完了するまで待ちます。
  • p2.7 - プロセスが完了したら (20 分後)、p2.1 に進みます。

Xml構造は次のようになっています。

   <Message>
     <Message-Body>
       <Message-Context>App1</Message-Context>
       <URL>`http://localhost:8080/App1`</URL>
     </Message-Body>
     <Message-Body>
        <Message-Context>App2</Message-Context>
        <URL>`http://localhost:8080/App2`</URL>
     </Message-Body>
   </Message>
于 2013-08-02T08:59:41.947 に答える
0

簡単な方法は、DB に Http リクエストを含むテーブルを作成し、クエリを実行するプログラムを作成し、結果が見つかったときにスリープ状態でない場合はリクエストを作成することです。

while(真){

//query the DB
if (have_results){
         //http request
         // remove request from the DB

 }else{
     // sleep 1s

}

}

コードではありませんが、簡単なはずです。

ありがとう

于 2013-08-02T07:58:46.820 に答える