問題タブ [akka-remote-actor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
akka - Akka Remote 複数接続
A と B の 2 つのサーバーがあります。これらは Akka Remote を介して通信します。サーバー B のアクターは、サーバー A のアクターを監視します。サーバー A がアップグレードのために再起動すると、B から A への 2 つの tcp 接続が開始される場合があります。サーバー B がサーバー A にメッセージを送信すると、サーバー B の akka ログは、要求の送信を示します。しかし、応答を受信していません。サーバー A の Akka ログは、要求の受信と応答の送信を示しています。私は Akka 2.3.12 を使用しています。それを避けるために私は何をすべきですか?ありがとう
scala - netlogo 拡張用に akka プロジェクトをパッケージ化する方法は?
akka に基づく単純な NetLogo 拡張機能を作成しようとしています。ただし、NetLogo で拡張機能をロードしようとすると、次のエラーが表示されます。
これは明らかに、一部の構成が欠落していることを意味します。次に、reference.conf をリソース フォルダーに追加しましたが、うまくいきませんでした。
私が最後に試したのは sbt-assemblty プラグインの使用でしたが、同じエラーが発生し続けます。だからこれは私のbuild.sbtです:
次の内容の project/assembly.sbt があります。
ルートに assembly.sbt があり、内容は次のとおりです。
私のscalaコードには次のものがあります:
resources フォルダーには、現時点では使用しない application.conf が含まれています。jar tf コマンドの出力を「参照」という表現で grep すると、reference.conf が存在することが明確に示されます。
この akka の例を netlogo 拡張用にパッケージ化するにはどうすればよいですか?
注: ライブラリの依存関係として akka-actor と akka-remote を含めました。OS X プラットフォームで Intellij と SBT 0.13.8 を使用しています。
編集: Ayush からアドバイスを受けた後、コマンド sbt アセンブリから次の出力が得られますが、同じ例外がまだ存在します。
java - Akka Remote と、カスタム デシリアライゼーションによる不明なクラスのインターセプト
問題/コンテキスト。リモート アクターにメッセージを送信する必要があります。これらのメッセージには、受信者側では不明なクラスのオブジェクトが含まれている場合があります。そして、ClassNotFoundException を回避するために、このような状況をインターセプトする必要があります。
解決策の 1 つは、メッセージの逆シリアル化時に不明なクラスをインターセプトすることです。次に、リモート アクターが必要なクラスを持っていないことを送信者に伝えることができるように、メッセージを別のアプリケーション レベルのメッセージに置き換えることができます。
カスタム de/serializators は次のメソッドを持つ akka.serialization.Serializer を実装する必要があるため、このような傍受が可能かどうかはわかりません。
ここで、問題は、未知のクラスのオブジェクトに対する Class オブジェクトの構築 (Akka から行われる) に起因します。
私のニーズに対応するために、下位レベルのポイントで Akka デシリアライゼーションをカスタマイズする方法はありますか?
その他のソリューション。
- この問題は、別の解決策が提案されている次の SO の質問に示されているものと似ています:リモート オブジェクトをアクセス可能な最も狭いクラスに逆シリアル 化する ただし、その解決策は私にとって十分ではありません。インターフェイスを制限することは問題ありませんが、追加のメソッドを使用したクラスの実装が必要になるからです。
akka - Akka での逆シリアル化とクラスローディング - NoClassDefFoundError
逆シリアル化エラーが不足しているクラスが交換されるプロトコルをトリガーするAkka システムをセットアップしようとしています。この目的のためにカスタム デシリアライザーを使用します。このデシリアライザーは、欠落しているクラスに関連する例外をキャッチすると、アプリケーション アクターに特定のメッセージを返します。
簡単に言えば、リモート システム B がオブジェクトをシステム A に送信します。逆シリアル化中にシステム A がClassNotFoundErrorまたはNoClassDefFoundErrorを取得した場合、システム A はシステム B に未定義クラスのバイトコードを要求します。A が B からの応答 (クラス名と Array[Byte] 型のオブジェクトのペア) を受信すると、クラスを登録できるため、次にシステム B がオブジェクトをシステム A に送信したときに、A はそれを逆シリアル化できます。正しく。
さて、2つのアプローチがあります
1) システム B も、要求されたクラスに関連するすべてのクラスを送信します。
2) システム B は、要求されたクラスのバイトコードのみを送信します (その依存関係は除きます)。
ここで、アプローチ 2 に注目して、次のシナリオを考えてみましょう。
- 1) B ===obj:X==> A (B はクラス X のオブジェクトを A に送信します)
- 2) X が Y,Z に依存しているとしましょう
- 3) B <====X?==== A (A がクラス X を B に尋ねる)
- 4) B =====X====> B (B はクラス X を A に提供し、A はクラス X を登録します)
- 5) B ===obj:X==> A (依存関係 Y がないため、A はエラーになります)
- 6) B <====Y?==== A
- 7) B =====Y====> A (A はクラス Y を登録します)
- 8) B ===オブジェクト:X==> A
- 9) B <====Z?==== A
- 10) B =====Z====> A (A はクラス Z を登録します)
- 10) B ===obj:X==> A (OK、最終的に A はクラス X のオブジェクトを逆シリアル化できます)
このようなプロトコルは機能するはずですが、実際には、次の理由により、手順 5 ~ 7 でループが発生します。
NoClassDefFoundError: Lexamples/DemoDecentralizedAkkaPlatformCmdLineMain2$AggregateProgram$$anonfun$main$3$$anonfun$apply$5;
次のクラスを登録します。examples.DemoDecentralizedAkkaPlatformCmdLineMain2$AggregateProgram$$anonfun$main$3$$anonfun$apply$5
ただし、NoClassDefFoundError が発生し続けます。
最初の「L」と末尾の「;」を取り除いていることに注意してください。クラス名から、および「/」を「。」に置き換えます。そうしないと、システム B でエラーが発生します。
質問の複雑な定式化で申し訳ありません。
scala - AKKA リモート アクター エラー
AKKAリモートの例を実行しようとしています
リモート アクターがマシンで起動されます (IP アドレス 192.168.1.7)。しかし、自分のマシンからローカル アクターを起動すると、リモート アクターに接続できません。ローカルおよびリモート アクターのシステム構成を見つけてください。
ローカル:
リモート:
リモート アクターに接続するローカル システムのコード:
ローカル システムを起動すると、次のメッセージが表示されます。
akka - RemotingShutdownEvent からのノード アドレスの取得
現在、Akka 2.0.4 から 2.4.2 に更新しています (かなり大きな飛躍であることはわかっていますが、段階的に行うことは誰も考えていませんでした)。
いずれにせよ、古いコードベースでは、マスター ノードがリモート スレーブ ノードに接続されており、失敗することがあります (「理由」はまだ調査中です)。スレーブが停止すると、マスターはRemoteClientShutdownイベントを受信し、そこから抽出して適切getRemoteAddress
に処理できます (たとえば、障害が発生したノード アドレスを指す電子メールごとに管理者に通知します)。
バージョン 2.4.2 では、クラスはRemotingShutdownEventRemoteClientShutdown
に置き換えられました (少なくとも私はそう思います) 。これはオブジェクトであるため、イベントのソースに関する特定の情報を持ちません。
移行ガイドと現在のドキュメントを確認しましたが、この問題を解決する方法に関する情報が見つかりませんでした。Event Busのドキュメントによると、そのような情報を抽出する唯一の方法は、メッセージでそれを提供することです (「EventBus は発行されたメッセージの送信者を保持しないことに注意してください。元の送信者への参照が必要な場合は、メッセージ内で提供してください」)。
リモートシステムのシャットダウン時に送信されたメッセージを何らかの方法でオーバーライドする必要がありますか? または、それを解決するための他の推奨される方法はありますか? この質問が初心者すぎないことを願っています。私はまだAkkaを初めて使用しています。
akka - Akka Remote: 自動生成されたポートを取得
自動生成されたポートを取得する Java クライアントがあります。アクターシステム起動後、ポートにアクセスしたい。
その後のログ出力ActorSystem.create(...)
は次のようになるため、ポートはすでに設定されている必要があります。
を使用して構成を介して取得しようとするとactorSystem.settings().config().getValue("akka.remote.netty.tcp.port")
、以前に定義されたように 0 が取得されます。
このポート (例では 58735) にアクセスする方法を知っている人はいますか?