0

私はフィールドロボティクスで働いており、中央サーバーが車両の状態、環境の状態、タスク、タスクのグループ化などに関係するデータのヒープ全体を追跡しています。このデータのさまざまな部分を処理するプロセスと、特定の部分が変更されたときに更新する必要があるユーザーインターフェイスがあります。

私が欲しいのは、システムが中央サーバーに接続し、データの一部をサブスクライブする方法です。彼らはすべてのデータを彼らにパイプダウンし、変更が発生すると送信されます。さらに、特定の更新を統合できることを指定できるようにしたいと思います。車両が3回移動したが、接続されたUIの帯域幅が、最新の位置だけが送信されるよりも少ない場合です。

現在、クライアントサブスクリプションクエリを追跡し、それらに送信するデルタを計算するインメモリデータベースを考えています。データモデルを配布するためのより良い方法または既存のソリューションはありますか?

4

2 に答える 2

2

タプルスペースが必要な場合があります。Javaには、 Jiniの一部であるJavaSpacesがあります。すぐに変更通知をサポートするのか、それとも自分で何らかの通知を追加する必要があるのか​​はわかりません。

于 2009-08-18T11:01:34.887 に答える
0

このシナリオでは、おそらく(一種のab-)ApacheServiceMixを使用します。メッセージ指向ミドルウェアを使用すると、プロジェクトにのみメリットがあります。

非常に高いレベルの視点から私のソリューションを説明する:

私の見方では、問題を少し抽象化すると、発生するイベントについて話します。これらのイベントは、(ビジネス)ルールに従って処理する必要があります。これらのビジネスルールに応じて、他の通信パートナーに同期的または非同期的に通知する必要があります。

そのため、イベントが発生したときに、さまざまなステーションがServiceMixのActiveMQコンポーネントにかなり単純なJMSメッセージを送信できます。次に、 ApacheCamelで実行されているビジネスロジックがそれらのメッセージを読み取り、処理します。Camelコンポーネントは、エンタープライズ統合パターン用の豊富な機能セットを提供します。ここでのビジネスロジックの実装は、かなり単純で簡単です。通知が必要なステーションは、ユースケースに応じて、JMSキューまたはトピックにサブスクライブするか、カスタムまたは多くの既存のコネクタデータ形式の1つを介して同期的にサブスクライブできます。ヒント:プロトコルバッファの送信over JMSまたはAMQPは、比較的簡単にCまたはC++で実装できます。これにより、ステーションで非常に効率的なコードが可能になり、同時にJVMへの依存がなくなります。

ServiceMixセットアップを使用すると、さまざまな利点があります。

  • 非同期通信にJMSを使用する場合の、イベントと計算データの両方に対する永続的な通知とサブスクリプション–適切に設定されていれば、イベントが失われることはありません。これは、RAMベースのソリューションの場合とは異なります。
  • 戦闘テスト済みの環境で、すぐに使用できます
  • メンテナンスの容易さ:アプリケーションが適切に計画されている場合、ビジネスロジックの更新は、ダウンタイムがほとんどない(数分の1秒)か、まったくない状態で展開できます。これは、ビジネスロジックがOSGiバンドルとして実装され、それらのバンドルの置き換えを適切に処理できるためです。
  • 開発の容易さ:アプリケーション全体を開発する必要はなく、ビジネスロジック、つまりActiveMQとドメインモデルにメッセージを送信するソフトウェアを実装するだけで済みます。
  • 既存のSOAへのシームレスな統合
  • 設計上、複雑な問題はさまざまな小さな問題に分割されます。これにより、安定性が向上し、アジャイル開発手順と完全に一致する可能性があります。
于 2015-11-13T18:32:31.903 に答える