3

Something私のアプリは、ステートレス コントローラーで API 呼び出しを介しての新しいインスタンスを取得します。ミッション クリティカルな作業 (Postgres データベースへの保存やトランザクションのコミットなど) を行った後、一連のファイア アンド フォーゲット操作を実行したいと考えています。

コントローラーで、モデル インスタンスをポスト プロセッサに送信します。

import _root_.com.eaio.uuid.UUID
import akka.actor.Props
// ... skip a bunch of code
play.api.libs.concurrent.Akka.system.actorOf(
    Props[MySomethingPostprocessorActor],
    name = "somethingActor"+new UUID().toString()
) ! something

アクターは次のMySomethingPostprocessorActorようになります。

class MySomethingPostprocessorActor extends Actor with ActorLogging {

    def receive = {
        case Something(thing, alpha, beta) => try {
                play.api.libs.concurrent.Akka.system.actorOf(
                    Props[MongoActor],
                    name = "mongoActor"+new UUID().toString()
                ) ! Something(thing, alpha, beta)
                play.api.libs.concurrent.Akka.system.actorOf(
                    Props[PubsubActor],
                    name = "pubsubActor"+new UUID().toString()
                ) ! Something(thing, alpha, beta)
                // ... and so forth
        } catch {
            case e => {
                log.error("MySomethingPostprocessorActor error=[{}]", e)
            }
        }
    }
}

だから、ここに私がよくわからないものがあります:

このページの警告に従って、アクター ファクトリが推奨されないことはわかっています。UUIDこれに対する私の救済策は、 your-actor-is-not-unique エラーを回避するために、によって提供される一意の文字列で各アクター インスタンスに名前を付けることです。

play.core.ActionInvoker$$anonfun$receive$1$$anon$1:
    Execution exception [[InvalidActorNameException:
        actor name somethingActor is not unique!]]

上記を行うためのより良い方法はありますか?つまり、すべてに一意の名前を付ける代わりに? 私が遭遇した Akka ドキュメントのすべての例は、アクターに静的な名前を付けていますが、これは少し誤解を招きます。

(他のコメントも大歓迎です。たとえば、私が使用するバンドルパターンが嫌われている場合など)

4

1 に答える 1

1

私の知る限り、 name パラメータはオプションです。

これは、Akka + Play に当てはまる場合とそうでない場合があります (確認していません)。ただし、スタンドアロンのアクター システムを使用する場合は、通常、後で参照する必要がある場合にのみアクターに名前を付けます。

その音から、これらのインスタンスを使用後に捨てているので、おそらく名前付けステップをスキップできます。

さらに良いことに、操作を Future でラップし、必要に応じてコールバックを使用するだけで、各アクター インスタンスを作成するオーバーヘッドをおそらく節約できます: http://doc.akka.io/docs/akka/2.0.3/scala/futures. html

于 2012-08-22T12:46:27.283 に答える