java中sender 类_Akka - Sender [null]发送了类型的消息

我有一条喷雾路线,我宣布我的一个演员 .

val myActor = actorRefFactory.actorSelection("/user/my-actor")

我的路线看起来像:

get {

path(Segment / Segment) { (poolId, trackId) =>

respondWithMediaType(MediaTypes.`application/json`) {

val request = Request(poolId, trackId)

val f = (myActor ? request)

.recoverWith {

case a: AskTimeoutException =>

Future.failed[StandardRoute](throw new Exception(s"We got a timeout", a))

case e: Exception => Future.failed[StandardRoute](throw new Exception(s"We got an error", e))

}

onComplete(f) {

case Success(resp) => complete(OK, resp)

case Failure(e) =>

log.error(s"Fatal request error: $trackId / $poolId", e)

complete(InternalServerError, ErrorCodes.ErrorNotHandled)

}

}

}

}

有时,我可以看到当我同时收到大量请求时,其中一些可能会因以下消息而失败:

引起:akka.pattern.AskTimeoutException:在[8000 ms]之后询问[ActorSelection [Anchor(akka:// default /),Path(/ user / my-actor)]]的超时时间 . Sender [null]发送了类型为“my.company.messages.Request”的消息 .

问题是,如果我采取相同的请求,并尝试再次发送它,它的工作原理,有时只会发生这种情况,我不知道如何解决这个问题 .

演员确实做了很多事情,里面有很多未来,直到它给喷射路线返回一个值 .

在actor中,我创建了一个名为replyTo的val,以保持发送者的值 .

有关为什么有时我会收到此错误的任何想法?

EDIT

关于我如何管理myActor的一个例子:

class MyActor extends Actor with ActorLogging {

private implicit val timeout = Timeout(8.seconds)

def receive = {

case req: Request =>

val replyTo = sender()

doOneThing.map { one =>

doSecondThing(one).map { sec =>

replyTo ! sec

}

}

}

}

doOneThing和doSecondThing在哪里是期货......我有很多在不同情况下围绕这个演员传播 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值