问题标签 [akka-cluster]

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 投票
2 回答
211 浏览

scala - akka中有原子广播吗?

我需要原子广播,我想使用 akka 集群。

我不确定akka中是否有原子广播,所以我只想问一下,确定。

我知道,有这样的事情DistributedPubSubMediator.SendToAll以及Cluster Aware Routers. 有没有支持全点播的?

我的意思是原子(全序)广播,演员 A 发送广播 bA 以及演员 B 发送广播 bB(并行并从另一个节点)。最终,(每个参与者在 bB 之前收到消息 bA)或(每个参与者在 bA 之前收到消息 bB)。

0 投票
3 回答
2252 浏览

java - 如何将种子节点添加到正在运行的 akka-cluster

我正在尝试创建一个容错的 akka 集群,它将部署在 AWS 中。它是一个标准集群,具有 3 个种子节点 SN1、SN2 和 SN3 以及连接到一个种子节点的多个 Akka 系统。SN 具有 ASG,它将在一个新实例出现故障时旋转一个新实例。

我知道如果 SN1 发生故障,系统将故障转移到其他 SN(种子节点)。但是如何在不停止集群的情况下无缝注册现在具有新 IP 地址的 SN1。

我尝试了以下没有运气

  • Cluster.joinseednodes 仅在启动时起作用
  • 每个 SN 后面的 ELB 都不起作用。Akka 无法连接到 ELB

有没有人知道如何将种子节点添加到正在运行的 Akka 集群中?

谢谢

0 投票
1 回答
2976 浏览

java - Akka 远程路由主机名配置问题

我正在为我正在制作的工具体验 akka 远程功能。实际上,我能够使核心系统和远程系统在具有不同端口的同一主机上工作。请注意,我的远程服务器通过路由器运行,如 akka 文档中所述。

现在我正在尝试使用几个 azure 虚拟机来进行更好的实验,但我遇到了一些问题。

核心应用程序具有以下配置(出于安全原因,我更改了一些名称):

而远程主机具有以下配置:

使用此配置,服务器和远程主机显然能够通信,但远程主机开始记录一些错误:

过了一会儿,服务器和远程主机开始记录错误并冻结。

服务器错误:

远程错误(多次类似的行):

我发现问题可能出在主机名配置中,并尝试将主机名放入服务器和远程主机。但是,在这种情况下,系统甚至不会加载:

我不知道我做错了什么。我试图查找有关该问题的信息,但我发现的任何内容都与我的问题有关。我也打开了 Azure 配置的端口。

如何使我的服务器主机能够与我的远程主机正确通信?

0 投票
1 回答
1122 浏览

scala - 将依赖项注入集群持久 Akka 演员的正确方法?

我将Akka PersistenceCluster Sharding一起使用。将依赖项提供给此类PersistentActor-s的正确方法是什么?

据我了解,将它们作为构造函数参数传递是不可能的,因为集群分片正在创建这些参与者。

使用 Spring/Guice/等。不是惯用的Scala(并且可能还有其他问题(?))。

使用 anobject来实现单例会导致繁琐的测试并且看起来很糟糕。

什么是正确的方法?

PS 如果您打算建议 Cake 模式,请在这个特定的 Akka Persistence Cluster Sharding 上下文中提供示例代码。

0 投票
3 回答
597 浏览

scala - 使用 sbt 和 Akka 微内核运行应用程序

我可以在我的项目中使用两者吗?

以前我只有对象扩展App特征,但自从我开始使用Microkernel后,我需要有类扩展Bootable特征。

假设我有这样的事情:

和这样的后端类:

我无法启动应用程序sbt run(缺少静态主方法时出错),但它适用于微内核,当我运行sbt stage并使用生成的脚本下次启动应用程序时它工作正常。

当我使用这样的东西时:

我可以使用 启动应用程序sbt "project backend" "run",但微内核不再起作用。

我能用它做什么?我应该有单独的文件来使用微内核和 sbt 启动应用程序还是单独的构建配置?

我需要使用微内核的应用程序的生产版本,并且我还想在使用 sbt 的开发过程中运行和调试我的应用程序。

我尝试使用相同的类或对象来扩展 App 和 Bootable 特征或配置 sbt.build 以对 Microkernel 和 进行单独配置sbt run,但这没有帮助。

0 投票
1 回答
463 浏览

scala - Akka-cluster 发现本地网络中的其他机器

我正在尝试在连接到本地网络的几台机器上运行http://typesafe.com/activator/template/akka-distributed-workers 。

我希望主机配置尽可能透明,所以我在我的项目配置中设置linux.local(作为 netty.tcp.hostname 和种子节点),并且在每台机器上都有一个解析linux.local到适当 IP 地址的 avahi 守护进程。

akka-cluster/akka-remote 是否应该使用 gossip 协议或以上配置自动发现其他机器将不起作用,我需要在每台机器上显式设置 IP 地址,例如通过参数传递它?

0 投票
1 回答
107 浏览

akka - Is DistributedPubSub mediator stashing the messages for unreachable members of the cluster

In a clustered environment, we are sending the message through DistributedPubSub mediator. So, we've some machines which are unreachable in the cluster, when the message was sent. And these machines comes reachable again before the "autodowning" has expired, then these machines do get the messages.

Does this mean that DistributedPubSub mediator stashes the messages for the unreachable members of the cluster and delivers them when they become reachable again?

0 投票
0 回答
206 浏览

scala - 如何访问 akka.routing.Router?

我正在使用application.conf中的路由器配置创建路由器。

在某种情况下,我需要手动删除路由并将路由添加到我的路由器。我在 akka-scala 文档(链接)中看到,使用removeRouteeandRoutee我们将能够实现它。

但由于我使用配置创建路由器,我可以使用以下代码选择路由器。

在未来 onComplete Success 调用它返回akka.routing.RoutedActorRef。如何访问创建的akka.routing.Router?或者无论如何我可以将它转换为路由器对象?

非常感谢您提前。

0 投票
1 回答
290 浏览

akka - Akka 集群成员查询

使用akka集群,是否可以查询集群中当前有哪些成员?如果种子节点出现故障,最终又恢复了,它能否找出其他成员正在使用它作为种子节点吗?

0 投票
1 回答
291 浏览

tcp - 如何通过 tcpdump 查看集群中的 akka actor 之间交换的消息

我有一个 akka-cluster 项目:

https://github.com/roclas/akka-distributed-hash

这基本上是一个跨集群节点的分布式 HashMap。

我希望能够读取(使用 tcpdump 或 wireshark 或类似的东西)不同虚拟机中参与者之间交换的消息。

我怎么能做到?

进行 TCP 转储时,我只看到“集群消息”,但看不到不同虚拟机中不同参与者交换的消息。

如果我在端口 2551 上启动一个节点:sbt "run 2551" (将是主节点)

和端口 2552 上的另一个节点: sbt "run 2552"

当我这样做时实际发生了什么?:

curl -X PUT http://localhost:8551 --data "hello=333&world=456"

我明白那个:

  1. 主节点的 web 服务接收到 http put 请求

  2. 主节点更改其 HashMap 并向第二个节点的参与者发送一条消息,以便它更新其哈希(<-这是我要跟踪的部分)

  3. 第二个节点更新它的哈希(所以这意味着消息已被成功接收)。我怎么无法使用 TCP 转储看到该消息?(我看到端口 2552 上没有收到任何内容,并且我还做了一个 tcpdump 监听所有网络接口和所有端口,从我发送 http put 消息的那一刻到第二个节点中更新哈希的那一刻,没有tcp消息似乎包含主节点中的actor发送给第二个节点上的actor的akka​​消息)

谢谢