我正在使用akka.Net开发一个插件体系结构,其中每个包含一个或多个插件的dll被加载到自己的AppDomain中,一个新的参与者系统被初始化,准备接收来自“主机”的消息。
我试着让它与多个插件一起工作,就会变得不那么麻烦了。
因此,主机配置如下所示:
akka {
actor {
provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
}
remote {
helios.tcp {
transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
applied-adapters = []
transport-protocol = tcp
port = 50003
hostname = localhost
}
}
}插件配置如下所示:
akka {
actor {
provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
}
remote {
helios.tcp {
transport-class = ""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
applied-adapters = []
transport-protocol = tcp
port = 50004
hostname = localhost
}
}(有很多这样的例子)
我的问题是如何将来自主机的消息发送到所有插件?
发布于 2015-03-19 19:07:42
最好的建议是使用Akka.Cluster。下面是一个有详细文档的示例:https://github.com/petabridge/akkadotnet-code-samples/tree/master/Cluster.WebCrawler
编辑-删除使用动态端口的建议。最好使用静态的,这样节点重新启动才能被正确地处理。
让每个插件配置使用一个特定于插件的端口(akka.remote.helios.tcp.port = 1231),然后定义一个集群路由器,与履行特定角色的参与者系统对话。
/api/broadcaster {
router = broadcast-group
routees.paths = ["user/api"]
cluster {
enabled = on
max-nr-of-instances-per-node = 1
allow-local-routees = on
use-role = crawler
}
}部署在某个节点上的path user/api/broadcaster上的路由器可以(通过Broadcast路由策略)与部署在集群中任何节点的路径user/api上的任何参与者进行通信,而无需查找IP地址、端口或任何这些垃圾。
通过Akka.NET的配置中的以下部分配置节点的群集信息:
cluster {
#manually populate other seed nodes here, i.e. "akka.tcp://lighthouse@127.0.0.1:4053"
seed-nodes = ["akka.tcp://webcrawler@127.0.0.1:4053"]
roles = [crawler]
}种子节点-必须是众所周知的静态定义端口和IP地址.阅读这篇文章,了解为什么这很重要。
Roles --以逗号分隔的字符串,用于定义这个特定节点的功能。它们更像标签。您可以在集群路由器中使用它们(就像我前面展示的那样),以明确您想要与哪些节点进行通信。
https://stackoverflow.com/questions/29134203
复制相似问题