c# - 我需要与多个远程参与者系统进行通信

标签 c# akka akka.net

我正在尝试使用 akka.Net 开发一个插件架构,每个包含一个或多个插件的 dll 都被加载到它自己的 AppDomain 中,并且一个新的 actor 系统被初始化准备好接收来自“主持人”。

我试图让它与多个插件一起工作,但我变得无所适从。

因此主机配置如下所示:

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
    }
}

(有很多这样的)

我的问题是如何从主机获取消息到所有插件?

最佳答案

最好的建议是使用 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
  }
}

这个路由器,部署在路径user/api/broadcaster在某些节点上可以(通过 Broadcast 路由策略)与部署在路径 user/api 上的任何参与者进行通信在集群中具有角色 crawler 的任何节点上无需查找 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 地址。阅读这篇文章,了解为什么这很重要。

角色 - 定义此特定节点功能的逗号分隔字符串。它们更像是标签。您可以在集群路由器(如我之前展示的路由器)中使用它们来阐明您想要与之通信的节点类型。

关于c# - 我需要与多个远程参与者系统进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134203/

相关文章:

java - scala akka 微内核中线程 "main"java.lang.InstantiationException 中的异常

c# - 奥尔良。阿卡网。理解 Actor 模型的问题

c# - 将对象的新实例添加到列表中

c# - 在 UWP (Windows 10) 中强制文本框为大写

java - 类型安全配置 : Load configuration from src/test/resources

java - 我们如何在java中使用Akka-remote-access进行2路通信

akka.net - 如何使用 Akka.net 中的 TestKit 测试 DistributedPubSub?

c# - Akka.NET 和 MVVM

c# - 在 C# 中,内部结构给出编译器警告

C# 和 FFmpeg 最好没有 shell 命令?