我有 2 个演员,Actor1
和Actor2
. Actor1
想要发送MyMsg1
到Actor2
,并且Actor2
在做一些工作并得到Future[MyMsg2]
想要发送MyMsg2
到之后Actor1
。我已经以一种方式工作,但它因 DI 而失败。
场景 1 - 工作场景
- Actor1 -->MyMsg1-->Actor2
- Actor2 MyMsgHandler - 处理消息(使用 Future),使用 pipeTo 到发送者
MyMsg2
。工作正常,Actor1 recvsMyMsg2
场景 2 - 失败的场景
- Actor1 有一个通过 MacWire 注入的 bean -
myBean
。 myBean
已Actor2
作为 bean 注入MyMsg1
并发送到 Actor2- Actor2 MyMsgHandler 处理消息(使用 Future),对发送者执行 pipeTo 并尝试发送
MyMsg2
- 转到 deadLetter。发送者的演员 Ref 永远不会被设置。
- Actor1 有一个通过 MacWire 注入的 bean -
我该如何解决?
也粘贴代码
class Actor1(failedService: FailedService, actor2: ActorRef @@ Actor2) extends Actor{
override def receive: Receive = {
case TriggerActor1() =>
println("Actor1 triggered from REST controller. Send msg to actor 2")
failedService.testSend()
//actor2 ! Msg1()
case Msg2() => println("got msg2 from actor 1")
}
class Actor2 extends Actor {
override def receive: Receive = {
case Msg1() => {
println("send without future")
val origsender = sender()
origsender ! Msg2()
}
}
class FailedService(actor2: ActorRef@@Actor2) {
def testSend() = {
actor2 ! Msg1()
}
}
使用我上面共享的当前代码,Actor1
能够发送Msg1
并Actor2
响应actor2
,Msg2
但Msg2
会进入死信。我收到以下错误
akka.actor.DeadLetterActorRef - Message [backup.failedakka.Msg2] from Actor[akka://application/user/actor2#-662746578] to Actor[akka://application/deadLetters] was not delivered. [1] dead letters encountered.
但是,如果failedService.testSend()
在我的 Actor1 中使用该行,我取消注释它下面的行并使用它进行通信,一切正常。Q现在清楚了吗?我正在使用 MacWire 注入依赖项