Cluster computing Net集群的简单解释
我尝试使用akka.net做一个简单的集群 目标是让服务器接收请求,并让akka.net通过it集群处理请求 为了测试和学习,我创建了一个简单的WCF服务,它接收一个数学方程,我想发送这个方程来求解 我有一个project server和另一个客户端 服务器端的配置为:Cluster computing Net集群的简单解释,cluster-computing,akka.net,Cluster Computing,Akka.net,我尝试使用akka.net做一个简单的集群 目标是让服务器接收请求,并让akka.net通过it集群处理请求 为了测试和学习,我创建了一个简单的WCF服务,它接收一个数学方程,我想发送这个方程来求解 我有一个project server和另一个客户端 服务器端的配置为: <![CDATA[ akka { actor { provider = "Akka.Cluster.ClusterActorRefProvider, Akka
<![CDATA[
akka {
actor {
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
debug {
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}
deployment {
/math {
router = consistent-hashing-group #round-robin-pool # routing strategy
routees.paths = [ "/user/math" ]
virtual-nodes-factor = 8
#nr-of-instances = 10 # max number of total routees
cluster {
enabled = on
max-nr-of-instances-per-node = 2
allow-local-routees = off
use-role = math
}
}
}
}
remote {
helios.tcp {
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
applied-adapters = []
transport-protocol = tcp
port = 8081
hostname = "127.0.0.1"
}
}
cluster {
seed-nodes = ["akka.tcp://ClusterSystem@127.0.0.1:8081"] # address of seed node
}
}
]]>
或
有人知道一个好的教程或者可以帮助我吗?
谢谢一些评论:
第一:假设您将工作从服务器发送到客户端。然后,您就可以在客户端上有效地远程部署参与者。
这意味着只有服务器节点需要actor.deployment
config部分。
客户端只需要默认的集群配置(当然还有您的角色设置)
第二:先让它简单一些。改为使用循环池。这要简单得多。试着让它工作起来。然后从那里一路爬上去。
这样更容易消除配置/网络/其他问题
您的用法:actor=sys.ActorOf(Props.Empty.WithRouter(FromConfig.Instance),“math”)代码>是正确的
您的循环池
配置的示例:
deployment {
/math {
router = round-robin-pool # routing strategy
nr-of-instances = 10 # max number of total routees
cluster {
enabled = on
max-nr-of-instances-per-node = 2
allow-local-routees = off
use-role = math
}
}
}
试试这个。如果有帮助,请告诉我
编辑:
看了你的样品后,好的。有些事情我改变了
ActorManager->Process
:为每个请求创建一个新的路由器参与者。不要那样做。创建router actor一次,然后重用IActorRef
- 取消了
MathAgentWorker
项目中的最小集群大小设置
- 因为您没有使用远程参与者部署。我将
循环池
更改为循环组
在那之后,它起了作用
还要记住,如果您使用一致散列组
路由器,则需要指定散列密钥。有多种方法可以做到这一点,在您的示例中,我认为最简单的方法是将发送到路由器的消息封装在一个一致的hashable信封中。查看文档以了解更多信息
最后,akka部署部分如下所示:
deployment {
/math {
router = round-robin-group # routing strategy
routees.paths = ["/user/math"]
cluster {
enabled = on
allow-local-routees = off
use-role = math
}
}
}
cluster {
seed-nodes = ["akka.tcp://ClusterSystem@127.0.0.1:8081"] # address of the seed node
roles = ["math"] # roles this member is in
}
在MathAgentWorker上,我只更改了cluster部分,该部分现在如下所示:
deployment {
/math {
router = round-robin-group # routing strategy
routees.paths = ["/user/math"]
cluster {
enabled = on
allow-local-routees = off
use-role = math
}
}
}
cluster {
seed-nodes = ["akka.tcp://ClusterSystem@127.0.0.1:8081"] # address of the seed node
roles = ["math"] # roles this member is in
}
ActorManager.Process
所做的唯一事情是:
return await Program.Instance.RouterInstance.Ask<TResult>(msg, TimeSpan.FromSeconds(10));
return wait Program.Instance.RouterInstance.Ask(msg,TimeSpan.FromSeconds(10));
我尝试过,但效果并不好。我实现的唯一方法是要求为某个特定角色聚集领导角色的地址。但这样做,我不使用部署,也不使用路由器电源。编辑我的答案,分享我对您的示例项目的发现。也。下次请使用与onedrive不同的代码共享机制。非常感谢,主要问题是循环池与循环组
return await Program.Instance.RouterInstance.Ask<TResult>(msg, TimeSpan.FromSeconds(10));