akka actor java_了解崩溃时的akka actor默认行为

actor的默认行为是restart . 为了更好地理解,我创建了两个actor并导致重启:

class PingActor extends Actor with ActorLogging {

import PingActor._

override def postRestart(reason: Throwable): Unit = {

log.info(s"RESTARTING")

super.postRestart(reason)

}

var counter = 0

val pongActor = context.actorOf(PongActor.props, "pongActor")

def receive = {

case Initialize =>

pongActor ! PingMessage("ping")

case PongActor.PongMessage(text) =>

log.info("In PingActor - received message: {}", text)

counter += 1

if (counter == 3) {

log.info("FIN")

context.system.shutdown()

}

if (counter == 2) {

sender() ! PingMessage("ping")

throw new IllegalArgumentException("Aooch")

}

else sender() ! PingMessage("ping")

}

}

object PingActor {

val props = Props[PingActor]

case object Initialize

case class PingMessage(text: String)

}

class PongActor extends Actor with ActorLogging {

import PongActor._

def receive = {

case PingActor.PingMessage(text) =>

log.info("In PongActor - received message: {}", text)

sender() ! PongMessage("pong")

}

}

object PongActor {

val props = Props[PongActor]

case class PongMessage(text: String)

}

所以 PingActor 在崩溃之前发送消息,并且当Ping actor重新启动时 PongActor 回复它接受消息但发送者( PongActor )不可用 . 我确实在deadLetters中看到了这一行

[INFO] [MyActorSystem-akka.actor.default-dispatcher-4] [akka:// MyActorSystem / user / pingActor / pongActor]来自Actor的消息[com.example.PingActor $ PingMessage] [akka:// MyActorSystem / user / pingActor#-1362690296]到演员[akka:// MyActorSystem / user / pingActor / pongActor#1725419686]未送达 . [1]遇到死信 . 可以使用配置设置'akka.log-dead-letters'和'akka.log-dead-letters-during-shutdown'关闭或调整此日志记录 .

why the sender that sent the message prior to the crash is not available ? is there a way to overcome it ?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值