c# – 我需要与多个远程actor系统进行通信

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

我试图通过多个插件来解决这个问题.

所以Host配置看起来像:

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""
            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),然后定义一个与执行特定角色的actor系统对话的集群路由器.

/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上部署的此路由器可以与使用角色爬虫在集群中任何节点上的路径user / api上部署的任何actor进行通信(通过广播路由策略),而无需查找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地址.阅读文章,了解为什么这很重要.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


c语言数组越界会怎么样
c语言指针怎么等于数组
c语言数组怎么存入文字
c语言中怎么显示数组
c语言数组元素怎么选
c语言数组怎么累加
c语言数组符号怎么输入
c语言怎么用长数组
c语言数组函数怎么输入
c语言数组怎么去掉差异
c语言怎么求解数组
c语言数组怎么用变量
c语言怎么申明数组
c语言怎么控制数组
c语言怎么计算数组长度
c语言数组怎么插星号
c语言数组怎么加长度
c语言中怎么输出数组
c语言怎么记住数组边界
c语言数组怎么输入符号