問題タブ [akka]

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.

0 投票する
1 に答える
2399 参照

java - Javaの基本的なカスタムAkkaスーパーバイザー

Akkaを使用して再試行セマンティクスでジョブを実装しようとしています。ワーカーがジョブ中に失敗した(例外をスローした)場合は、ワーカーを再起動するだけでなく、作業していたジョブを再送信したいと思います。

私が試しているアプローチはカスタムスーパーバイザーですが、失敗したときにワーカーを再起動させることはできません。たとえば、Akka 1.1.3で次のコードを実行すると、再起動メッセージは表示されません。

私が間違っていることについて何か考えはありますか?

ありがとう!

0 投票する
1 に答える
1413 参照

scala - Akka は Scala のように反応しますか? それともディスパッチャーによって処理されますか?

私の理解では、そうではありません。アクターを作成するには、Actor クラスを拡張して receive を実装する方法と、アクター メソッドの 1 つを使用して匿名のアクターを作成する方法の 2 つがあります。ここまでは順調ですね。

Akka にはディスパッチャ (http://akka.io/docs/akka/1.1.3/scala/dispatchers.html) の概念があるため、アクターを作成して受信を実装すると、デフォルトでScalaの反応に似たイベントディスパッチャ? もちろん、アクターを OS のスレッドに結び付ける必要がある場合は、スレッド ベースのディスパッチャを使用することになりますが、これは Scala での receive と似ていますか?

0 投票する
2 に答える
2713 参照

scala - akka Actorのフォールトトレランスを設定するにはどうすればよいですか?

akkaActorsでフォールトトレラントな動作を取得しようとしています。私は、システム内のアクターが長時間の処理に使用できることに依存するいくつかのコードに取り組んでいます。処理が数時間後に停止し(約10時間かかるはずです)、あまり発生していないことがわかりました。私のアクターは例外から回復していないと思います。

アクターを1対1で永続的に再起動するには、何をする必要がありますか?これは、このドキュメントhttp://akka.io/docs/akka/1.1.3/scala/fault-toleranceから実行できると思います。

私はakka1.1.3とscala2.9を使用しています

このコードは、LoadBalancerの背後に5つのアクターを設定します。これらのアクターは、障害をシミュレートするために偶数に例外をスローすることを除いて、送信される整数を出力します。整数0から200がこれらのアクターに送信されます。奇数が出力されることを期待していますが、偶数でいくつかの障害が発生すると、すべてがシャットダウンするようです。このコードをsbtで実行すると、次の出力になります。

ここで起こっていると思うのは、5人の俳優が始まり、最初の5人の偶数が彼らを廃業させ、彼らは再開されていないということです。

アクターが例外から回復するように、このコードをどのように変更できますか?

これにより、実際には1から200までのすべての奇数が出力されると思います。各アクターは偶数では失敗しますが、例外ではそのままのメールボックスで再開されると思います。preRestartとpostRestartからprintlnが表示されることを期待しています。これらのことを実現するには、このコードサンプルで何を構成する必要がありますか?

ここに、私の誤解につながる可能性のあるakkaとActorsに関するいくつかの追加の仮定があります。アクターは、受信中に例外がスローされたときに再起動され、引き続き使用できるように、スーパーバイザーまたはfaultHandlerで構成できると想定しています。アクターに送信されたメッセージは、受信中に例外をスローすると失われると想定しています。例外をスローするアクターのpreRestart()とpostRestart()が呼び出されると想定しています。

コード例は、私がやろうとしていることを表しており、Akkaでアクターへのディスパッチが縮小されている理由に基づいています。

**別のコードサンプル**

これは、より単純な別のコードサンプルです。私は偶数に例外を投げる1人の俳優を始めています。邪魔になるロードバランサーやその他のものはありません。俳優に関する情報を印刷しようとしています。メッセージがアクターに送信され、何が起こっているかを監視した後、1分間プログラムを終了するのを待っています。

これで奇数が出力されると思いますが、アクターがメールボックスにメッセージを入れて座っているように見えます。

OneForOneStrategyの設定を間違えていますか?アクターを何かにリンクする必要がありますか?この種の構成は、私の側で根本的に誤った方向に向けられていますか?ディスパッチャは、何らかの方法でフォールトトレランスを設定する必要がありますか?ディスパッチャのスレッドを台無しにすることはできますか?

次のような出力が得られます:

0 投票する
1 に答える
2681 参照

scala - Akka、Spray、および埋め込み桟橋の組み合わせ

Akka、Spray、Jettyを含むスタンドアロンJARを作成しようとしています。理想的には、外部ファイルを一切使用せずに、アプリケーション全体をその単一のファイルで配布します。

組み込みのJettyサーバーインスタンスを作成する方法を理解しています

また、HelloServiceクラスとBootクラスを作成する際にSprayのサンプルコードに従いましたが、2つを接続する方法がわかりません。そのため、JettyサーバーでURLが要求されると、Sprayサービスがそれに応答します。どんな助けでも大歓迎です。

更新: Alois Cochardによって促された一連の問い合わせのおかげで、この問題の解決にかなり近づいています(私は、Webスクリプトのバックグラウンドから来ており、Java Webサービスに頭を悩ませています...挑戦的です! )。サーバーを起動し、入門テンプレートにあるJettyおよびakka構成ファイルを読み取るようにmainメソッドを変更しました。これらのファイルの両方を読み取っていますが、Jettyサーバーで/に移動すると、次のようになります。

HTTPエラー:500

/へのアクセスに問題があります。理由:

アサーションに失敗しました:ID'spray-root-service'のアクターが0個見つかりました、正確に1個が必要です

私は何かばかげたものが欠けていることを知っています(そしておそらくSBTを分解して使用する必要がありますが、Eclipseでコンパイルして実行し、ブラウザーで更新できるのはとてもシンプルで魅力的です)。

アップデート#2:問題を解明しました。私はWebAppContextオブジェクトを作成していませんでした。つまり、web.xmlが読み取られなかったため、Akkaが読み込まれていませんでした。これは、現在機能している改訂されたメインメソッドです。

0 投票する
1 に答える
1505 参照

actor - リモート アクターを使用して認証を実装する方法は?

私はカード ゲームに取り組んでいますが、アクター (特にリモート アクター) が適しているようです。リモート アクターを使用してログインするという概念を実装する方法がわかりません。プレイヤーがファット クライアントを起動してユーザー名とパスワードを入力した場合、次に何が起こるでしょうか? クライアントは次のことを行う必要があります。

  • ログインの成功を表すためにいくつかの状態が変化するユーザーリモートアクターがありますか?
  • Authentication リモート アクターのメソッドを呼び出して、ログインしている User リモート アクターへのハンドルを取得しますか?
  • まったく別の何か?

また、ネットワークの問題が発生した後の再接続にこれがどのように適合するのかも疑問に思っています。

0 投票する
1 に答える
2315 参照

scala - Akka フレームワーク (Scala) - 大規模で複雑な状態を格納するエージェント

私は最近 akka フレームワークを発見し、私のプロジェクトの 1 つにぴったりだと感じました。これまでのところ、私はそれに非常に感銘を受けていると言わなければなりません。

私のプロジェクトでは、100 万以上のエンティティが状態の更新を非常に高速に受け取る必要があります。当然、akka Actors が第一候補のようです。ただし、エージェントを使用して状態の更新を保存する方がよいのではないかと思います (これまでのところ、私のアクターには、状態を更新するためのメッセージとそれを読み取るためのメッセージの 2 つしかありません。変わることはありません)。

エージェントのいくつかの例を見ると、エージェントは大規模で複雑な状態を格納するためのものではないように感じます。私が間違っている?

要するに、次のようなものを保存したいと思います。

明らかに、状態の更新は、整数を使用するおもちゃの例よりもきれいではありません;)

それでは、エージェントを持つことは理にかなっていますか? これをどのように行うつもりですか?

回答ありがとうございます。

-LP

0 投票する
1 に答える
1244 参照

scala - AkkaRESTサービス+ディスパッチ

ここの例に従いました。うまくいきます。しかし今、私はいくつかのビジネスロジックを実行する必要がありますcase get:Get =>

必要なビジネスロジックには、ディスパッチライブラリの使用が含まれます。一言で言えば、私はあるページにリクエストを行い、データを取得し、それをあるクラスでラップして、それを返します。

私の受信ケースは次のようになります。

これは動作しません:

また、で応答したHTTP 200 OK、(ディスパッチライブラリを使用して)要求を開始しているようです。

ここで何が問題になる可能性がありますか?

0 投票する
0 に答える
479 参照

scala - Akka エラー post.request.getReader

akka-mist と protobuf を使用しています。言語スカラ。Protobuf エラー

テスト送信者:

レストポストモック:

アクター:

結果として:

0 投票する
2 に答える
2254 参照

scala - Akkaの分散アクター

私はAkkaにかなり慣れておらず、分散プログラミング全般に慣れていません。AkkaのMistコンポーネントを使用して、HTTPリクエストを非同期的に処理する監視対象アクターを作成しました。現在、すべてがローカルアクターを備えた1台の物理マシンで実行されています。私が理解していないのは、複数のボックスを備えた真のフォールトトレラントシステムを構築する方法です。Akkaのドキュメントに記載されているように:

また、(通常)一方のボックスがダウンしているかどうか、および/またはもう一方のボックスで話しているサービスがダウンしているかどうかを知る必要があります。ここで、アクターの監視/リンクは、リモートサービスの状態を監視するだけでなく、実際にサービスを管理するための重要なツールです。アクターまたはノードがダウンしている場合は、問題に対して何かを実行します。同じノードまたは別のノードでアクターを再起動するなど。

どうすればよいですか?アプリケーションの配布を開始する方法の例または指針を探しています。私たちのグループの他のサービスは、複数のTomcatインスタンスの前でApacheゲートウェイを使用するため、Tomcatサーバーがダウンした場合のイベントはユーザーに対して透過的です。サービスをAkkaマイクロカーネルにデプロイしており、複数の物理ボックスで同様のレベルの高可用性を実現する必要があります。

Akka1.1.3を使用しています。