问题标签 [akka.net-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.
c# - 枚举 Akka.NET 集群中的可用参与者
我有两个演员,我们称他们为 ActorA 和 ActorB。两个参与者作为基于 Topshelf 的 Windows 服务驻留在自己的独立进程中。
基本上它们看起来像这样。
我的配置文件超级简单
演员A:
演员B:
我现在想识别附加到我的集群的所有给定参与者。我通过等待集群节点MEMBER UP
事件并尝试向给定参与者发送Identify()
消息以接收对它的引用来做到这一点。
问题是我似乎无法成功将消息发送回ActorA
. 事实上,在执行上述代码时(尽管我在 ActorSelection 方法中有正确的引用),ActorIdentity 消息被调用ActorB
而不是ActorA
.
我已尝试处理 ActorA 中收到的所有消息,但似乎我从未收到该Identity
消息。但是,我可以使用相同的 ActorSelection 引用成功发送任何其他类型的消息 ActorA 。
那么任何人都可以提供任何见解吗?为什么我的身份信息永远不会到达我的目标演员?
c# - 有没有办法在 Akka.NET 的给定节点上获取当前可用的所有实例化角色
我的应用程序中有以下代码,它在我的集群中创建了一个 Akka.NET 角色的实例,如下所示:
请注意,我故意省略了 name 属性,因为我打算创建 N 个 ActorA 类型的演员并且不想管理名称。运行上面的代码,我最终得到一个具有如下 ID 的演员:
我遇到的问题是试图从不同的节点确定 Actor 路径。因此,例如,我尝试执行以下操作:
通过利用集群MEMBER-UP
事件,我尝试向新成员发送Identify
请求,但我遇到的问题是ClusterEvent.MemberUp
提供的对象不包含有关节点内参与者的信息,但似乎只包含如下所示的节点引用:
akka.tcp://mycluster@localhost:666
这很有意义,因为它是上线的节点,而不是演员。
如果我将代码更改为使用命名演员:
然后我可以成功地查询我需要的服务。当您有一个命名的参与者时,这是您所期望的,但似乎没有办法从外部实际确定节点上正在运行的参与者的实例。
那么,当使用 N 个未命名演员的实例时,识别对您感兴趣的演员的引用的正确步骤是什么,特别是当演员生成时没有名字?
编辑:
我决定重述这个问题,因为我最初没有充分描述它。这个问题的正确表达是:
“当你只有节点路径时,有没有办法从外部参与者获取给定节点上当前可用的所有实例化参与者?”
对我来说,这似乎应该是基本框架中内置的东西,除非有某种我不完全理解的设计考虑。
我还注意到,我认为解决我的特定问题的正确方法可能只是我正在尝试做一个 Pub/Sub 而这个https://getakka.net/articles/clustering/distributed-publish-subscribe.html是更合适。
akka.net - akka.net 集群:如何将消息从种子节点发送到非种子节点
我是 akka.net 的新手。我在一个集群中有 2 个 .net core2 控制台应用程序,试图将来自一个控制台应用程序 [这是种子节点] 的参与者的消息发送到另一个控制台应用程序 [非种子节点] 上的远程参与者。
启动/运行两个控制台应用程序后,集群建立,两个节点都启动,种子节点知道非种子节点,反之亦然,但非种子节点上的远程参与者没有收到消息. 我正在种子节点上创建一个循环路由器,但不确定我缺少什么?
请指导。
下面是两个应用程序的示例代码,即种子节点和非种子节点。
// 带有种子节点的 .net core2 控制台应用程序
具有非种子节点的 .net core2 控制台应用程序
akka.net - 无法加入 Akka.NET 集群
我在加入和调试加入 Akka.NET 集群时遇到问题。我使用的是 1.3.8 版。我的设置如下:
灯塔
几乎来自 github 的默认代码。在控制台 akka.hocon 中运行如下:
工作节点
还有控制台(net461)应用程序,启动和加入尽可能简单。它按预期工作。akka.hocon:
不工作节点
一个 .NET 4.6.1 库,注册为 COM 并使用 VBA 代码在其他(Media Monkey)应用程序中启动:
Akka 系统与控制台应用程序一样,是使用标准创建的ActorSystem.Create("sng", config);
akka.hocon:
调试工作流
启动灯塔应用程序:
配置结果:[Success] Name sng.Lighthouse [Success] ServiceName sng.Lighthouse Topshelf v4.0.0.0, .NET Framework v4.0.30319.42000 [Lighthouse] ActorSystem: sng; IP:127.0.0.1;端口:4053 [灯塔] 执行启动前健全性检查。应该可以解析地址 [akka.tcp://sng@127.0.0.1:4053] [灯塔] 解析成功。[21:01:35 INF] 开始远程处理 [21:01:35 INF] 远程处理开始;监听地址:[akka.tcp://sng@127.0.0.1:4053] [21:01:35 INF] 远程现在监听地址:[akka.tcp://sng@127.0.0.1:4053] [21 :01:35 INF] 集群节点 [akka.tcp://sng@127.0.0.1:4053] - 正在启动... [21:01:35 INF] 集群节点 [akka.tcp://sng@127.0. 0.1:4053] - 启动成功 sng.Lighthouse 服务现在正在运行,按 Control+C 退出。[21:01:35 INF] petabridge.cmd 主机绑定到 [0.0.0.0:9110] [21:01:35 INF] 节点 [akka.
启动和停止工作控制台节点
灯塔日志:
工作节点日志:
- 启动和停止 COM 节点
灯塔日志:
COM 节点日志:
你知道如何调试和/或解决这个问题吗?
c# - Akka.NET 集群客户端
我尝试使用 Akka.NET 创建应用程序。
主要目标是制作一个可以同时处理许多客户端连接和请求的服务器。我为此选择了 Akka.NET。我有一个集群,现在只包含 1 个节点。
我还有同时开始连接到服务器的集群客户端 (ClusterClient)。客户端的逻辑很简单:它连接到服务器并在那里订阅一个actor。发布还没有问题,客户得到了一切,当然,如果连接稳定的话。大约 4000-5000 个客户端连接,重新连接开始,连接相应丢失。我曾尝试向集群中添加第二个节点并为每个节点建立 3000 个连接,但这并不成功。
问题是如何在 AKKA.Net 上建立一个服务器,它可以容纳大量的连接(例如,100 000 - 1 000 000)。我可以为此目的使用集群吗?
服务器
客户订阅者和发布者
客户
服务器配置
akka.net - Akka.NET 使用什么协议与集群中的节点通信?
例如,设置remote{}
配置是否也会设置内部用于集群通信的传输,例如心跳消息。
我没有要求任何用例目的,所以我更好地了解幕后发生的事情。
akka.net - Akka.NET:将 akka.net 集群中的子 Actor 创建限制在单台机器上
我们的应用程序中有一个特殊的场景——这个应用程序中的所有子角色都处理大量数据(大约 50 - 200 MB)。因此,我们决定在创建父actor的同一台机器(工作进程)中创建子actor。
目前,这是通过使用角色来实现的。我们还使用 .NET 内存缓存在子 Actor 之间传输数据(几 MB)。
问题:是否可以关闭子actor中的聚类以达到我们期望的结果?
编辑:更具体地说,我在下面详细解释了我们的应用程序设置。
- 整个过程发生在大约 5 台机器的 Akka.NET 集群中
- 工作进程(包含父actor和子actor)部署在每台机器中
- 在此设置中,父actor和子actor都启用了集群
当我们发现将子actor分布在机器上造成的网络开销时,我们决定将子actor的创建限制在接收到主要请求的相应机器上,并且只在机器上分布父actor。
在与解决此问题的 Akka.NET 专家联系时,我们被建议使用“角色”来将子角色的创建限制在集群系统中的单台机器上。(例如,Worker1Child、Worker2Child 而不是“Child”角色)
问题(续):我只想知道,如果简单地在子角色中禁用集群选项会达到相同的结果;这样做是最佳做法吗?
请指教。
c# - 非种子节点加入失败。灯塔错误丢弃非本地收件人的消息 [Akka.Actor.ActorSelectionMessage]
我使用 Lighthouse 作为我的种子节点,我正在编写我的第一个集群节点。我对akka集群很陌生,所以不知道我做错了什么。我有灯塔正在运行,并且一个非种子节点试图加入并获取错误消息 Dropping message [Akka.Actor.ActorSelectionMessage] 用于非本地收件人。
尝试了各种配置,但没有成功。我确保灯塔和非种子节点中的 Actor System 名称相同。查看代码和 HOCON
非种子节点 Actor 系统创建:
在灯塔上使用这个 HOCON
在 Non-See 节点上使用这个 HOCON
灯塔日志消息:
akka.net - 无法在 Akka.Net 集群中创建节点级本地参与者
我们正在尝试创建几个节点级别参与者 [池路由器] 用于应用级别管理、本地路由和节流目的。
提到节点特定角色作为这些参与者的目标角色,以进行严格的本地路由。
下面是示例代码和 hocon。
但是当我们向这个actor发送消息时,它的行为就像一个集群actor。它将第 n+1 个 [n = max-nr-of-instances-per-node] 消息重定向到不同节点中的相似参与者。看起来好像角色设置被忽略了。
我们甚至尝试禁用集群 [cluster -> enabled = off 并且还通过从 hocon 中删除集群配置]。但它没有用。在用户监护人之下创建此路由器的那一刻,参与者的行为就好像它是一个集群参与者。
请指教。
ssl - Akka.NET TLS 实现
我正在关注https://getakka.net/articles/remoting/security.html文档以使用 Akka.Net 集群实现 TLS 安全通信。我使用 IIS 生成了一个自签名证书,并将证书 TheCertifcate.pfx 导入到本地计算机/受信任的根证书颁发机构。证书现在在那里列出。
我需要知道如何使用证书路径
我应该使用path
什么?