【发布时间】:2013-10-26 03:59:03
【问题描述】:
我目前每秒钟向 Akka Actor 发送一条消息,以便它执行任务。
如果当参与者收到新消息时该任务(函数)仍在运行,我希望参与者什么都不做。基本上,我希望演员函数仅在它尚未运行时才运行。
有什么好的方法可以做到这一点?我应该使用 Akka 演员还是以其他方式做?
干杯
【问题讨论】:
-
如果函数在actor内部同步运行,它的行为就已经是这样了。它有一个消息框,一次只能处理一条消息。
-
@drexin 不完全是。这个问题似乎暗示如果演员很忙,应该删除该消息。 (但这对演员来说是一个糟糕的用例。演员不应该花费大量时间来处理消息。)
-
@Blackbird 如果actor已经在处理一些消息,你想防止干扰新的消息处理吗?或者您想在新消息到达时暂停/中止当前处理?
-
我不希望当前的处理被中止。如果最后一条消息仍在处理中,我希望忽略该消息。 @RobinGreen 是对的。
-
我是新手,但我想知道演员是否能够在完成处理消息后将演员邮箱的 MessageQueue 中的所有内容出列()。我相信这会产生您想要的效果,但如果执行需要几秒钟,消息可能会堆积起来。可能有架构上的原因,这是一个坏主意;这绝对是超出 Actor 预期范围的行为。