最好的推荐是使用 Akka.Cluster。这是一个有据可查的示例:https://github.com/petabridge/akkadotnet-code-samples/tree/master/Cluster.WebCrawler 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
}
}
该路由器,部署在路径上user/api/broadcaster
在某些节点上可以通信(通过Broadcast
路由策略)与部署在路径上的任何参与者user/api
在集群中具有角色的任何节点上crawler
无需查找 IP 地址、端口或任何其他废话。
您可以通过 Akka.NET 配置中的以下部分配置节点的集群信息:
cluster {
#manually populate other seed nodes here, i.e. "akka.tcp://[email protected] /cdn-cgi/l/email-protection:4053"
seed-nodes = ["akka.tcp://[email protected] /cdn-cgi/l/email-protection:4053"]
roles = [crawler]
}
种子节点- 必须是众所周知的、静态定义的端口和 IP 地址。阅读这篇文章,了解为什么这很重要。
Roles- 以逗号分隔的字符串,定义此特定节点的功能。它们更像是标签。您可以在集群路由器(就像我之前展示的那样)中使用它们来阐明您想要与哪种类型的节点进行通信。