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 ドキュメントのすべての例は、アクターに静的な名前を付けていますが、これは少し誤解を招きます。
(他のコメントも大歓迎です。たとえば、私が使用するバンドルパターンが嫌われている場合など)