尝试将本地 akka 服务器连接到本地网络上的另一个服务器
Trying to connect a local akka server to another on local network
我有点迷茫,我对 akka 完全陌生,我有点挣扎。
长话短说,我在做一个工作项目,开发代码库的人走了,所以我真的不太了解 akka。
我想在本地调试我的服务器,所以我启动了第一台名为 ActorServer 的服务器(使用 eventstore 玩得很开心),使用这个我没有问题
我还有一个连接到 Actor 服务器的 CommandExecutor 服务器,但之前它是为远程执行而设置的,在启动时我有一个 Actor Path Anchors 看起来像这样:
"akka.tcp://my-sys@host.example.com:5678/user/service-b"
我在文档中发现了这个:
https://doc.akka.io/docs/akka/current/general/addressing.html#actor-path-anchors
说我应该有一些看起来更像这样的东西:
"akka://my-sys/user/service-a/worker1"
但是我不知道应该用什么填充它我试过了:
"akka://localhost:60860/system/receptionist"
但是没用,我得到了
System.UriFormatException: 'Can not parse an ActorPath: akka://localhost:60860/system/receptionist'
我知道那是因为我没有正确的 "my-sys/user" 部分,但我不知道该放什么:/
感谢阅读=)
首先ActorPath
格式如下:
<protocol>://<actor-system-name>@<ip>:<port>/<guardian-actor>/<path-to-an-actor>
,其中:
- 远程通信的协议通常是
akka.tcp
- actor-system-name 是您在通过
ActorSystem.Create("actor-system-name", config)
. 创建时为您的 actor 系统指定的名称
- ip 和 port 是与您的远程参与者系统正在侦听的端点相关的详细信息。请记住,它们是特定的,用于比较。
- guardian-actor是ActorSystem自己创建的root actor。根据您创建演员的方式,它可以是以下两个选项之一:
- 通过
actorSystem.ActorOf
创建的 actor 的监护人称为 user
。这通常是99%演员的根
- 通过
actorSystem.SystemActorOf
创建的 actor 的监护人称为 system
演员路径的其余部分与演员层次结构相关(在 akka 中,演员按父子层次结构组织)。
设置远程 actor 系统时要记住的另一件事是正确配置它 - 默认情况下 actorSystem 仅在本地,在远程配置中工作的最低限度是使用 Akka.Remote 来自 NuGet 的包并设置以下配置:
// specify hostname and port, your actor system will be listening on
var config = ConfigurationFactory.ParseString(@"
akka.actor.provider = remote
akka.remote.dot-netty.tcp {
hostname = ""127.0.0.1""
port = 3456
}");
using (var system = ActorSystem.Create("systemName", config))
{
}
如果您的actor系统没有配置为remote
或cluster
并且没有相应的程序集,它将无法通过网络与其他actor系统通信。
您必须像这样使用 ActorPath:
akka.tcp://{SysytemName}@localhost:8096/user/{ActorName}
其中系统名称为您在创建系统时定义的名称:
var mySystem = ActorSystem.Create("MySystem", ConfigurationFactory.ParseString(configText));
并且ActorName是在ActorCreation时定义的:
mySystem.ActorOf(Props.Create(() => new MyActor());, "MyActor")
我有点迷茫,我对 akka 完全陌生,我有点挣扎。 长话短说,我在做一个工作项目,开发代码库的人走了,所以我真的不太了解 akka。
我想在本地调试我的服务器,所以我启动了第一台名为 ActorServer 的服务器(使用 eventstore 玩得很开心),使用这个我没有问题
我还有一个连接到 Actor 服务器的 CommandExecutor 服务器,但之前它是为远程执行而设置的,在启动时我有一个 Actor Path Anchors 看起来像这样:
"akka.tcp://my-sys@host.example.com:5678/user/service-b"
我在文档中发现了这个:
https://doc.akka.io/docs/akka/current/general/addressing.html#actor-path-anchors
说我应该有一些看起来更像这样的东西:
"akka://my-sys/user/service-a/worker1"
但是我不知道应该用什么填充它我试过了:
"akka://localhost:60860/system/receptionist"
但是没用,我得到了
System.UriFormatException: 'Can not parse an ActorPath: akka://localhost:60860/system/receptionist'
我知道那是因为我没有正确的 "my-sys/user" 部分,但我不知道该放什么:/
感谢阅读=)
首先ActorPath
格式如下:
<protocol>://<actor-system-name>@<ip>:<port>/<guardian-actor>/<path-to-an-actor>
,其中:
- 远程通信的协议通常是
akka.tcp
- actor-system-name 是您在通过
ActorSystem.Create("actor-system-name", config)
. 创建时为您的 actor 系统指定的名称
- ip 和 port 是与您的远程参与者系统正在侦听的端点相关的详细信息。请记住,它们是特定的,用于比较。
- guardian-actor是ActorSystem自己创建的root actor。根据您创建演员的方式,它可以是以下两个选项之一:
- 通过
actorSystem.ActorOf
创建的 actor 的监护人称为user
。这通常是99%演员的根 - 通过
actorSystem.SystemActorOf
创建的 actor 的监护人称为system
- 通过
演员路径的其余部分与演员层次结构相关(在 akka 中,演员按父子层次结构组织)。
设置远程 actor 系统时要记住的另一件事是正确配置它 - 默认情况下 actorSystem 仅在本地,在远程配置中工作的最低限度是使用 Akka.Remote 来自 NuGet 的包并设置以下配置:
// specify hostname and port, your actor system will be listening on
var config = ConfigurationFactory.ParseString(@"
akka.actor.provider = remote
akka.remote.dot-netty.tcp {
hostname = ""127.0.0.1""
port = 3456
}");
using (var system = ActorSystem.Create("systemName", config))
{
}
如果您的actor系统没有配置为remote
或cluster
并且没有相应的程序集,它将无法通过网络与其他actor系统通信。
您必须像这样使用 ActorPath:
akka.tcp://{SysytemName}@localhost:8096/user/{ActorName}
其中系统名称为您在创建系统时定义的名称:
var mySystem = ActorSystem.Create("MySystem", ConfigurationFactory.ParseString(configText));
并且ActorName是在ActorCreation时定义的:
mySystem.ActorOf(Props.Create(() => new MyActor());, "MyActor")