问题标签 [akka.net-networking]

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 投票
1 回答
148 浏览

akka.net - 两个不同主机上的循环组不起作用

我正在尝试将负载分配给多个 akka 演员系统。不幸的是,循环组没有将消息转发给远程工作人员。我可以看到演员已激活,但没有完成任何工作。

完整代码在github

我的配置中是否还有其他设置可能会遗漏?

0 投票
1 回答
281 浏览

c# - Akka.Remote 配置失败

我一直在尝试创建一个使用 Akka.Remote 和 akka.net 1.3 的演员系统......但是,由于以下异常,我无法创建该系统的实例:

问题是,我的配置是从 Akka.NET 文档中复制的,我不知道我做错了什么。这是配置:

我会很感激一些关于我做错了什么的反馈。谢谢你。

编辑:这是堆栈跟踪:

" 在 Akka.Remote.EndpointManager.get_Listens()\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 Akka.Remote.EndpointManager.<>c__DisplayClass48_0.b__0() \r\n 在 System.Threading.Tasks.Task`1.InnerInvoke()\r\n 在 System.Threading.Tasks.Task.Execute()"

0 投票
1 回答
455 浏览

c# - 枚举 Akka.NET 集群中的可用参与者

我有两个演员,我们称他们为 ActorA 和 ActorB。两个参与者作为基于 Topshelf 的 Windows 服务驻留在自己的独立进程中。

基本上它们看起来像这样。

我的配置文件超级简单

演员A:

演员B:

我现在想识别附加到我的集群的所有给定参与者。我通过等待集群节点MEMBER UP事件并尝试向给定参与者发送Identify()消息以接收对它的引用来做到这一点。

问题是我似乎无法成功将消息发送回ActorA. 事实上,在执行上述代码时(尽管我在 ActorSelection 方法中有正确的引用),ActorIdentity 消息被调用ActorB而不是ActorA.

我已尝试处理 ActorA 中收到的所有消息,但似乎我从未收到该Identity消息。但是,我可以使用相同的 ActorSelection 引用成功发送任何其他类型的消息 ActorA 。

那么任何人都可以提供任何见解吗?为什么我的身份信息永远不会到达我的目标演员?

0 投票
1 回答
1496 浏览

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是更合适。

0 投票
1 回答
1151 浏览

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:

调试工作流

  1. 启动灯塔应用程序:

    配置结果:[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.

  2. 启动和停止工作控制台节点

灯塔日志:

工作节点日志:

  1. 启动和停止 COM 节点

灯塔日志:

COM 节点日志:

你知道如何调试和/或解决这个问题吗?

0 投票
1 回答
158 浏览

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”角色)

问题(续):我只想知道,如果简单地在子角色中禁用集群选项会达到相同的结果;这样做是最佳做法吗?

请指教。

0 投票
1 回答
374 浏览

c# - 调试 Akka.NET 远程连接(无法连接 - 绑定失败)

使用作为 Akka.NET 源代码的一部分提供的示例聊天服务器/客户端项目,我尝试对其进行修改,使其能够在我的网络上的两台计算机上成功运行。

我有两个系统通过这样的路由器连接

然后我有两个配置如下的演员系统:

服务器:

客户:

不幸的是,虽然我能够在本地成功连接到聊天服务器,但无论我如何配置 Hocon,我似乎都无法让远程实例绑定到位于机器上的服务器 actor 192.168.0.29

我收到的具体错误消息

此错误消息向我表明 Akka.NET 没有可用的套接字可以访问。

具有讽刺意味的是,前段时间我问了一个非常相似的问题,当时它帮助我解决了连接问题,但直到最近我才再次使用 Akka.NET。

我注意到两台机器的防火墙都关闭了,并且可以成功地相互 ping,我还尝试了各种设置组合。

Akka.NET 服务器/客户端应用程序的原始源代码位于此处,我当前的版本位于此处

谁能提供任何关于我可能做错了什么以及如何改进我对 Akka.NET 远程连接的调试的见解?例如,有没有一种方法可以验证服务器上的 Actor 系统192.168.0.29是否可以从192.168.0.52外部访问?

0 投票
0 回答
52 浏览

aws-lambda - Akka.net Context.System.EventStream 在 aws lambda

我正在开发一个在 AWS lambda 中托管 asp.net 核心应用程序的解决方案。这仅允许每个团队成员在开发期间拥有一个环境。它将在 docker 中运行以进行集成并上线。企业知识意味着它必须以这种方式运行。这是一个小型演员系统,必须按顺序一次运行一个作业。

问题是在本地时,一切正常,但是当托管在 AWS lambda 中时,从许多特定actorRef.Tell()调用开始的过程一直工作到第一次调用:Context.System.EventStream.Publish(). 没有警告或失败,它只是停止,直到 lambda 超时。似乎Context.System.EventStream.Subscribe(Self, typeof(SomeEvent));只是不起作用

我已经包含了大量的日志记录,所以我可以准确地看到它停止的位置。我还启用了所有 akka.net 日志记录:

  • 这与托管环境Context.System.EventStream.Publish()的影响有何不同?actorRef.Tell()
  • aws lambda 环境会导致这种行为吗?
  • 有没有办法配置 akka.net 来解决 aws lambda 中的任何约束?
  • 有没有人遇到过这类问题?

编辑

akka.net 依赖的任何方面都EventStream不起作用。甚至使用Context.GetLogger. 当我从基于上下文的记录器更改为注入时,演员才开始记录ILogger<T>

下面是 lambda 调用的生命周期,从 13:09:07 到 13:09:12 一切都是肉汁,然后发布的事件无处可去:

0 投票
0 回答
63 浏览

akka.net - 在 Akka.Net 中,我们可以从 Tcp 演员派生 TcpStream 演员吗?

在 Akka.Net 中,我们可以从 Tcp actor 派生 TcpStream actor 吗?

我使用创建了一个 Tcp 演员

然后我将自己注册为处理程序

端点代表一个普通的远程 Tcp 套接字,而不是一个 Tcp 流参与者。

然后我订阅收到的消息

如何通过定义自定义框架逻辑的 Flow 将 Received 消息作为流使用?

我可以使用创建连接吗

0 投票
1 回答
80 浏览

c# - 带有 Akka.NET 的简单 TCP 服务器

嗨,我正在学习使用 Akka.net,我想做的是创建一个简单的 TCP 服务器,它会定期将数据发送到 tcp 连接。(然后将由 processingjs 客户端获取并显示在输出中)

不知道我在这里缺少什么。你们中的任何一位专家都可以对这个问题有所了解吗?

这些是我的演员:

我的印象是,当我SensorReaderTcp.Connected消息上注册时,我需要做的就是向SensorData流发送消息。像这样:_sys.EventStream.Publish(new SensorData("sensor-data[x]"));

但是,这似乎不起作用。我收到以下日志消息:

这就是我将 Tcp.Bind 消息发送到我的服务器的方式。

如您所见,我将 指定server为 Bound 消息的处理程序。还是我完全错了?

另外,我必须提到,当我启动我的 processingjs 客户端时,我确实收到一条Tcp.Connected消息到 my ProcessingServer,这反过来创建SensorReader并注册为处理程序。

我还想知道我EventStream是否正确使用了发布?

对此的任何帮助都将受到高度赞赏。谢谢你。