簡體   English   中英

帶有macWire DI的Akka actoreRef,未設置actoreRef

[英]Akka actoreRef with macWire DI, actoreRef is not set

我有2個演員, Actor1Actor2 Actor1希望將MyMsg1發送給Actor2Actor2在完成一些工作並獲得Future[MyMsg2]希望將MyMsg2發送給Actor1 我已經以一種方式進行了此工作,但是DI失敗了。

  1. 方案1-工作方案

    • Actor1-> MyMsg1-> Actor2
    • Actor2 MyMsgHandler -進程消息(具有未來),莫非pipeTo發件人與MyMsg2 工作正常,Actor1 MyMsg2
  2. 方案2-失敗的方案

    • Actor1有一個通過MacWire- myBean注入的bean。
    • myBeanActor2作為bean注入,並將MyMsg1發送到Actor2
    • Actor2 MyMsgHandler處理消息(使用Future),將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能夠發送Msg1Actor2actor2與響應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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM