问题标签 [akka]
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.
java - Java 中的基本自定义 Akka 主管
我正在尝试使用Akka实现具有重试语义的作业。如果工作人员在其工作期间失败(引发异常),除了重新启动它之外,我还想重新提交它正在处理的工作。
我正在尝试的方法是自定义主管,但我无法让它在失败时重新启动工作人员。例如,使用 Akka 1.1.3 运行以下代码,您将永远不会看到重新启动消息:
知道我做错了什么吗?
谢谢!
scala - Akka 有像 Scala 一样的反应吗?还是由调度员处理?
根据我的理解,它没有,有两种方法可以创建一个 Actor,即扩展 Actor 类并实现接收,或者使用其中一种 Actor 方法创建一个匿名 Actor。到现在为止还挺好。
Akka 有一个调度程序的概念(http://akka.io/docs/akka/1.1.3/scala/dispatchers.html),这是否意味着一旦我创建了一个actor并实现了接收,默认情况下我会得到类似于 Scala 中的反应的事件调度程序?当然,如果我需要将我的演员绑定到操作系统的线程,那么我将使用基于线程的调度程序,这类似于在 Scala 中接收吗?
scala - 如何设置 akka Actor 容错?
我正在尝试在 akka Actors 中获得容错行为。我正在编写一些代码,这些代码依赖于系统中的 Actor 可用于长期处理。我发现我的处理在几个小时后停止(大约需要 10 小时)并且没有发生太多事情。我相信我的演员们并没有从异常中恢复过来。
我需要做什么才能永久地以一对一的方式重新启动 Actor?我希望这可以从这个文档http://akka.io/docs/akka/1.1.3/scala/fault-tolerance
我正在使用 akka 1.1.3 和 scala 2.9
此代码在 LoadBalancer 后面设置了 5 个 Actor,它们只打印发送给它们的整数,除了它们在偶数上抛出异常以模拟故障。整数 0 到 200 被发送到这些 Actor。我希望奇数会得到输出,但在偶数出现几次错误后,一切似乎都关闭了。使用 sbt 运行此代码会产生以下输出:
我认为这里发生的是 5 个演员开始,前 5 个偶数让他们停业,他们没有重新开始。
如何更改此代码以使 Actor 从异常中恢复?
我希望这实际上会打印出从 1 到 200 的所有奇数。我认为每个参与者都会在偶数上失败,但在异常时会以完整的邮箱重新启动。我希望从 preRestart 和 postRestart 中看到 println。需要在此代码示例中配置什么才能使这些事情发生?
以下是关于 akka 和 Actors 的一些额外假设,可能会导致我的误解。我假设 Actor 可以配置为 Supervisor 或 faultHandler ,以便在接收期间抛出异常时重新启动并继续可用。我假设如果在接收期间抛出异常,发送给参与者的消息将丢失。我假设将调用引发异常的参与者的 preRestart() 和 postRestart() 。
代码示例代表我正在尝试做的事情,并且基于Why is my Dispatching on Actors in Akka?
** 另一个代码示例 **
这是另一个更简单的代码示例。我正在启动一个在偶数上抛出异常的演员。没有负载均衡器或其他东西。我正在尝试打印有关该演员的信息。在将消息发送到 Actor 并监视正在发生的事情后,我正在等待退出程序一分钟。
我希望这会打印出奇数,但看起来 Actor 坐在那里,邮箱里有消息。
我是否将 OneForOneStrategy 设置错了?我需要将 Actor 链接到某些东西吗?这种配置是否从根本上误导了我?调度程序是否需要以某种方式设置容错?我会弄乱 Dispatcher 中的线程吗?
我得到的输出如下:
scala - 结合 Akka、Spray 和嵌入式 Jetty
我正在尝试创建一个包含 Akka、Spray 和 Jetty 的独立 JAR。理想情况下,我将整个应用程序分发到该单个文件中,而无需任何外部文件。
我了解如何创建嵌入式 Jetty 服务器实例
并且我在创建 HelloService 和 Boot 类时遵循了 Spray 示例代码,但我不知道如何将两者连接起来,因此当在 Jetty 服务器上请求 URL 时,Spray 服务会响应它。任何帮助将非常感激。
更新:我离解决这个问题越来越近了,这要归功于 Alois Cochard 提出的询问线索(我来自网络脚本背景,并且了解 Java Web 服务一直......具有挑战性! )。我已经修改了我的主要方法来启动服务器并读取入门模板中的Jetty和akka 配置文件。它正在读取这两个文件,但是现在当我导航到 Jetty 服务器上的 / 时,我得到了这个:
HTTP 错误:500
访问 / 时出现问题。原因:
断言失败:找到 0 个 id 为“spray-root-service”的演员,预计只有一个
我知道我错过了一些愚蠢的东西(可能我应该分解并使用 SBT,但是能够在 Eclipse 中编译和运行,然后在浏览器中刷新,是如此简单和吸引人)。
更新#2:找出问题所在。我没有创建 WebAppContext 对象,这意味着 web.xml 永远不会被读取,因此 Akka 永远不会被加载。这是修改后的主要方法,现在正在运行。
actor - How to implement authentication using remote actors?
I'm working on a card game and it seems like actors - specifically remote actors - would be a good fit. I'm having trouble figuring out how to implement the notion of logging in using remote actors. If a player starts up a fat client and enters a username and password, what should happen next? Should the client:
- have a User remote actor where some state changes to represent a successful login?
- call a method on an Authentication remote actor and get back a handle to a logged in User remote actor?
- something else entirely?
I'm also wondering how this would fit in with reconnecting after a network issue.
scala - Akka 框架 (Scala) - 存储大型复杂状态的代理
我最近发现了 akka 框架,并觉得它非常适合我的一个项目。我必须说到目前为止我对它印象深刻。
在我的项目中,我需要让 100 万多个实体以非常快的速度接收状态更新。自然,akka 演员似乎是首选。但是,我确实想知道是否最好使用代理来存储状态更新(到目前为止,我的演员只有两条消息——一条用于更新状态,另一条用于读取状态——我不相信这会永远改变)。
查看代理的几个示例,我感觉它们并不意味着存储大型复杂状态。我错了吗?
简而言之,我想存储类似的东西:
显然,更新状态变得不如使用整数的玩具示例那么漂亮;)
那么有代理有意义吗?你会怎么做呢?
感谢您的回答!
-LP
linux - 被操作系统杀死的JVM进程
我已经通过 Akka(端点)使用 Camel 的 Jetty 组件实现了一个 Web 服务,它将接收到的消息转发到具有以下设置的参与者池:
而Processor是一个处理接收到的消息并以处理结果进行回复的类。该应用程序一直在我的本地计算机上正常运行且完美无缺,但是在将其部署在 EC2 微型实例(512m 内存 - 类似 CentOS 的操作系统)上后,操作系统(oom-killer)由于 OutOfMemory(不是 JVM OOM)而终止了进程30个左右的电话(不管电话的频率如何)。
在本地分析应用程序不会显示任何显着的内存泄漏(如果存在的话)。由于一些困难,我无法在远程机器上执行正确的分析,但监视“top”的输出,我观察到一些有趣的事情,即应用程序初始化后可用的可用内存保持在 400mb 左右,之后它在 380mb 到 400mb 之间反弹,这似乎很自然(gc等)。但有趣的是,在接到第 30 个左右的电话后,它突然从那里变成了 5mb 的可用内存,然后砰的一声,它被杀死了。/var/log/messages 中的 oom-killer 日志验证这已由操作系统完成,因为缺少内存/空闲交换。
现在这并不是完全与 Akka 相关,但经过 3 天的无望摔跤后,我终于决定向你们寻求一些建议。
感谢任何线索。
scala - Akka 错误 post.request.getReader
我使用 akka-mist 和 protobuf。语言斯卡拉。Protobuf 错误
测试发件人:
RestPostMock:
演员:
结果:
scala - Akka 中的分布式 Actor
我对 Akka 很陌生,对分布式编程也很陌生。使用 Akka 的 Mist 组件,我创建了受监督的 Actor 来异步处理 HTTP 请求。当前,所有内容都在具有本地参与者的一台物理机器上运行。我不明白的是如何构建一个具有多个盒子的真正容错系统。如 Akka 文档中所述:
此外,您(通常)需要知道一个盒子是否已关闭和/或您在另一个盒子上与之交谈的服务是否已关闭。在这里,参与者监督/链接是一个关键工具,不仅可以监控远程服务的健康状况,而且可以实际管理服务,如果参与者或节点出现故障,请对问题采取一些措施。比如在同一个节点或者另一个节点上重启actors。
我该怎么做呢?我正在寻找有关如何开始分发我的应用程序的示例或指示。我们组中的其他服务在多个 Tomcat 实例前使用 Apache 网关,因此 Tomcat 服务器宕机的事件对用户来说是透明的。我正在将我的服务部署到 Akka 微内核,并且需要在多个物理机器上实现类似级别的高可用性。
我正在使用 Akka 1.1.3。