![](/img/trans.png)
[英]How to set up play framework ApplicationLoader and Macwire to work with custom routes?
[英]Akka actoreRef with macWire DI, actoreRef is not set
我有2個演員, Actor1
和Actor2
。 Actor1
希望將MyMsg1
發送給Actor2
, Actor2
在完成一些工作並獲得Future[MyMsg2]
希望將MyMsg2
發送給Actor1
。 我已經以一種方式進行了此工作,但是DI失敗了。
方案1-工作方案
MyMsg2
。 工作正常,Actor1 MyMsg2
方案2-失敗的方案
myBean
注入的bean。 myBean
將Actor2
作為bean注入,並將MyMsg1
發送到Actor2 MyMsg2
發送到發件人,然后嘗試發送MyMsg2
轉到deadLetter。 從未設置發送者的演員Ref。 我該如何解決?
也粘貼代碼
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.
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()
中使用行failedService.testSend()
,則取消注釋其下方的行並使用該行進行通信,一切就可以正常進行。 Q現在清楚了嗎? 我正在使用MacWire注入依賴項
!
定義為:
def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit
您現在可以看到問題,盡管FailedService
范圍內沒有隱式發件人,但它在actor實現的“內部”范圍內。
我想你想做:
class FailedService(actor2: ActorRef@@Actor2) {
def testSend(implicit sender: ActorRef) = {
actor2 ! Msg1()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.