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)
}
为什么在崩溃前发送消息的发件人不可用?有办法克服吗?
正如文档所述,重新启动参与者时的默认行为是停止该参与者的所有子角色。这就是重新启动后发送给发件人
的邮件变成死信的原因。您需要重写默认行为,并在prestart()
挂钩中设置子级的初始化(即pongactor
)。另外,删除对super.postrestart(reason)
的调用。
class PingActor extends Actor with ActorLogging {
import PingActor._
override def preStart(): Unit = {
pongActor = Option(context.actorOf(PongActor.props, "pongActor"))
}
override def preRestart(reason: Throwable, message: Option[Any]): Unit = {
log.info("Don't stop the children")
postStop()
}
override def postRestart(reason: Throwable): Unit = {
log.info("RESTARTING")
}
var counter = 0
var pongActor: Option[ActorRef] = None
def receive = {
case Initialize =>
pongActor.foreach(_ ! PingMessage("ping"))
case PongActor.PongMessage(text) =>
...
}
}
进行上述更改会导致以下输出:
In PongActor - received message: ping
In PingActor - received message: pong
In PongActor - received message: ping
In PingActor - received message: pong
In PongActor - received message: ping
Don't stop the children
RESTARTING
In PingActor - received message: pong
In PongActor - received message: ping
In PingActor - received message: pong
In PongActor - received message: ping
Don't stop the children
RESTARTING
In PingActor - received message: pong
In PongActor - received message: ping
In PingActor - received message: pong
In PongActor - received message: ping
Don't stop the children
RESTARTING
In PingActor - received message: pong
In PongActor - received message: ping
...
除了第一个链接之外,更多关于重新启动的信息可以在这里找到。
我遵循默认的Mod Base教程,偶然发现了一个问题。当我尝试以默认方式开始新的跑步时,游戏崩溃: 正因为如此,我使用了BaseMod的调试控制台,看看我是否可以手动添加卡片、遗物、药水等。 DefaultMod中起作用的东西: 所有4件文物 此外,这些消息在通过IntelliJ调试ModTheSpire时出现。 此选项在ModSpire mod选择窗口中: 这一次是在修补过程中(我想是吧?),这
我试图在选项菜单中从主菜单调用另一个活动。当我从自己的选项菜单中调用主活动时,它将正常工作,但调用另一个意图将产生异常,应用程序将崩溃。我使用了try and catch,发现当它到达这条线时会崩溃: 下面是我的主java文件和应用程序清单文件。 } 对于manirfest: Logcat:
但是,在日志配置的xml文件中,冒号后面总是有一个破折号。这是为什么?例如: ” 2.不断变化的财产名称 特别是,此属性在application.properties(或.yml)中没有等价属性来配置它 ${log_file_total_size_cap:-0} 如果要将该属性更改为其他值,则必须设置LOG_FILE_TOTAL_SIZE_CAP属性。我如何在仍然使用spring Boot提供的原
问题内容: 当我选择2个条件时,mysql总是崩溃。对我来说,这个问题很奇怪: 就是为了这张桌子 这只发生在我的笔记本上。我们有具有相同版本mysql和相同sql的测试服务器(linux)可以 仅在任何一种情况下都不会发生 我尝试删除并重新创建表,转储数据,问题仍然存在 我尝试重新安装相同版本的mysql,并在笔记本中再次发生 有人说mysql 5.6可以,我没有尝试 Mysql版本是5.7.17
我使用getStringArrayListExtra()搜索将列表从一个活动传输到另一个活动。这在第一次(从MainActivity到Diag2Activity)时运行良好,但在第二次(从Diag2Activity到SSToActivity)时应用程序崩溃。 每次我使用相同的方法:第一次活动: 第二项活动: 谁能告诉我错误可能来自哪里?提前谢谢 请在下面找到完整的代码: 主要活动。JAVA } 主
我使用了新的Google Firebase SDK,现在我们一登录Sinch就崩溃了。 我正在使用以下依赖项