1

私は Java/scala akka の概念実証を書いていますが、現在、クラスター環境でのアクターの概念をいじっています。

仕様

システムが同じメッセージを複数のノードに送信する特定の状況があります。私の仕事は、これらのメッセージをドロップせず、1 つのメッセージだけをバックエンド システムに渡すことです。負荷分散/フェイルオーバー機能を備えた独自のフィルターのように。

考え

私は 2 つのノードで 2 つの「フロントエンド」アクターを使用することを考えていました。システムは、バックエンドに送信するフロントエンド アクターに送信するフロントエンド ルーター (ラウンド ロビンとしましょう) にメッセージを送信します。

もう 1 つのフォールバック ソリューションは、リーダーだけがバックエンドに送信するシステムを使用することです。このシステムでは、全員が同じメッセージを受け取り、リーダーだけがそれを転送します。

問題

私が直面している問題 (コードを参照) は、ルーターが既存のフロントエンド アクターをクラスターのルートとして使用することです。これは、サンプル コードでは失敗します。これは、ルーターがroutees-path (config 設定) によってルートをローカルでのみ検索し、何も見つからずに終了するためです。

ルーターがクラスターノードにルートを展開する構成でも成功していません。常にローカルに展開します。

ここにサンプルコードがありますhttp://ge.tt/2UHUqoQ/v/0?c。2 つのエントリ ポイントがあります * TransformationSample.App2 - コマンドライン パラメータ 2551 と 2552 をそれぞれ使用して 2 つのインスタンスを実行します (シード ノード) * TransformationSample.App1 - コマンドライン パラメータを使用せずに 1 つのインスタンスを実行します

App1 は、ルーターを作成して通信しようとするものですが、フロントエンド ルーターをローカルで見つけることができないため、ルーターは終了します。問題は akka.cluster.routing.ClusterRouteeProvider クラスの createRoutees メソッドの行 178 https://github.com/akka/akka/blob/releasing-2.1.0-RC1/akka-cluster/src/main/scalaに固定されています/akka/cluster/routing/ClusterRouterConfig.scala .

最後に

私はおそらくここで何か間違ったことをしているので、私の scala を許してください (これは私が書いている最初のプロジェクトです)。

このルーターが機能することを望んでいる理由は、概念実証の次のステップは、フロントエンド アクターが送信する (別の) バックエンド クラスター ルーターと通信する同様の設定でバックエンド システムの負荷を分散することであるためです。バックエンド アクターに対してラウンド ロビンで動作します。

これはオーバーエンジニアリングですか?フロント部分のフェイルオーバーとバック部分の負荷分散が必要です。

4

1 に答える 1

0

まず、どんな俳優を使っていますか?ScalaとAkkaのアクターは互いに異なります。akkaアクターを使用している場合は、リモートアクターシステムを使用してみてください。これは、DBがインストールされている場合は特に便利です。

于 2012-11-07T07:59:51.400 に答える