问题标签 [akka-fsm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
396 浏览

akka - 使用 Akka FSM 的入口操作

任何具有合理复杂性的状态机都需要在进入状态时执行一些进入动作。例如,UML 状态机图为此目的有一个特殊的操作。不幸的是,我看不到如何在 Akka FSM 中对此类进入操作(或退出操作)进行建模。对转换执行操作(使用下划线输出状态)不起作用,因为进入操作旨在更改状态数据(例如,准备在新状态下操作所需的数据结构)。关于如何在 Akka FSM 中模拟进入/退出动作的任何建议?

0 投票
1 回答
333 浏览

akka - Akka FSM 超时通知

我正在开发一个游戏,其中游戏逻辑/状态本身由 Akka FSM 演员管理。我的状态之一是WaitingForAnswer,与此状态相关的业务逻辑是玩家(也是演员)必须在 20 秒内回答,否则他/她将失去一分。所以我这样定义状态:

到目前为止,一切都很好。现在我想做的是有某种提醒 - 在状态超时的一半过去后(10 秒后),我想向玩家发送提醒,他必须尽快回答。

我的想法:

  1. 通过将 设置为 10 秒setTimer(name, msg, interval, repeat)进入WaitingForAnswer状态时使用。interval这样我的 FSM 演员就会得到一个提醒,提醒他提醒玩家演员。正如你所看到的,这有点......不太酷。

  2. 使用调度程序,一旦我的 FSM 演员进入WaitingForAnswer状态,安排一条消息在未来 10 秒内以玩家演员作为接收者。当然,在这种情况下,我必须确保在玩家演员及时响应时取消预定的消息。

有没有其他更自然的方法来实现这一点?某种钩子?某种方式setTimer与不同的收件人一起使用?

0 投票
1 回答
150 浏览

akka-persistence - 我可以在 Akka 中混合 Persistent FSM 和 at-least-once-message 传递吗

阿卡提供

  1. 具有至少一次消息传递的持久 Actor (链接)
  2. 一个持久的 FSM (链接)

我可以将两者混合吗?我希望能够维护一个持久的状态机,但也有阶段更改触发事件,这些事件向其他参与者发送消息,并保证至少一次消息传递

0 投票
1 回答
67 浏览

scala - 如何解释这些模式匹配示例?

我在 FSM 中编写了一些事件,并在模式匹配时发现了一些我无法解释的东西。我认为以下内容是完全合法的,即我可以向该参与者发送消息,该消息是向量 [A] 或向量 [B]。

但是,如果我向 actor 发送一个 vector[B] 消息,它会导致

所以基本上它会尝试匹配第一个事件,即使下一个会匹配。

我试图做一个更简单的模式匹配示例;

}

这实际上是不合法的;

但是,如果我执行以下转换,我可以运行我的代码;

我觉得奇怪的是,我显然说 Any 可以匹配一个字符串,但打印的是 java.lang.Integer。所以我应该认为它是因为我有一个向量 [Int],我说它是一个向量 [Any],因为向量 [Any] 可能是一个向量 [字符串],它与该模式匹配,并且再次因为它确实是一个向量 [ Int] 我屏蔽为 Vector[Any] 打印也很好。

有人可以解释这些模式匹配观察吗?

以及我应该如何设置消息以便我的状态可以同时处理 Vector[A] 和 Vector[B] 的消息?

0 投票
1 回答
183 浏览

scala - 在 Akka FSM 中覆盖“receive”是否安全?

我用 Akka 创建了一个 FSM。但是,我的 FSM 不仅收到与其 FSM 状态相关的消息。它的孩子也可以传递ActorRef给它,然后我的 FSM 应该进一步传递给它的父母。由于 Akka 中的 FSM (自然)也是演员,我想重写receive以捕捉那些ActorRefs. 然而,这样做破坏了演员的 FSM 功能。处理这种情况的正确方法是什么?

0 投票
1 回答
41 浏览

scala - 如何只处理来自儿童演员的消息?

我构建了一个 Akka FSM,它在其构造函数中生成了两个子 actor,并且只接收来自其中一个的消息。

在处理传入事件时,我想过滤那些来自lhsNode. 我试图通过以下方式实现这一目标:

这不起作用。事实上,senderlhsNode不平等,即使它绝对lhsNode是向我的 FSM 发送消息。

我究竟做错了什么?

0 投票
0 回答
52 浏览

akka - Akka FSM Testkit 无法正确捕获 *starting state*

我正在使用 Akka FSM 来模拟移动的电梯(你要去:不再!:-))并尝试使用常规 Testkit 功能测试 FSM,但我的理解或 FSM 的已发布行为似乎存在差距(或两者)。

这是代码的相关部分:

人们期望 FSM 将在 CurrentState 消息被创建并调用 startWith函数之后做出响应,但这并没有发生。此测试(再次部分代码)失败:

因此:

我的理解有差距吗?如果是的话,请教育我。

我还看到完全相同的问题 - 在这里以更概括的形式提出- 没有得到回答。这难道不是 Akka FSM 和 Testkit 语义上的一个缺口,值得解决吗?:-P

0 投票
0 回答
303 浏览

java - 使用应用方法测试 Akka Persistent FSM Actor

我正在尝试使用其 Java api 在 AKKA 中开发 FSM 模型。我希望对这个功能进行单元测试。我已经经历了许多关于单元测试具有 lambda 支持的 Akka FSM 演员的示例,但我找不到任何相关示例来测试相同的.applying.andthen方法,因此我可以确定测试涵盖了自定义处理从 DomainEventB 的参数派生的逻辑。

任何最好使用 Java 的帮助/资源将不胜感激。

0 投票
1 回答
832 浏览

scala - 具有 stashing 和 unstashing 的 Akka FSM Actor

我想使用 FSM Akka Acctor 进行存储/取消存储。我不知道在哪里放stash()and unstashAll()

我在下面有一个简化的例子:

初始状态为StateA。当在StateAactor 中时,应该只处理 type 的消息MessageA。如果它收到任何其他类型的消息(除了ChangeState),它应该将其隐藏。收到消息ChangeState后,actor 应更改为StateB. 从 更改为StateAStateB,它应该取消隐藏所有消息。当在StateBactor 中时,应该只处理 type 的消息MessageB

我不确定在哪里使用stash()andunstashAll()来实现这一点。

我运行的输出是:

我想看到的输出是:

非常感谢。

0 投票
1 回答
166 浏览

akka - 将 AKKA FSM 与许多并发实例一起使用

请寻找一些圣人的建议。

我有一个简单的订单管理 FSM,有六个州。我正在指定我的系统以支持每小时 10K 订单的峰值。每个订单将需要 10 到 120 秒来遍历 FSM。一些转换将调用第三方 API。还有一个持久数据存储来保存有关订单和进度的信息。

我正在考虑将 AKKA FSM 与每个并发订单的 FSM 实例一起使用。在我花太多时间在这个项目上之前,我正在寻找一个健全的检查,如果不是一个愚蠢的想法,我希望能指出我应该特别注意的任何领域。

谢谢你的帮助!