首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要与多个远程参与者系统进行通信。

我需要与多个远程参与者系统进行通信。
EN

Stack Overflow用户
提问于 2015-03-18 22:53:26
回答 1查看 3.5K关注 0票数 6

我正在使用akka.Net开发一个插件体系结构,其中每个包含一个或多个插件的dll被加载到自己的AppDomain中,一个新的参与者系统被初始化,准备接收来自“主机”的消息。

我试着让它与多个插件一起工作,就会变得不那么麻烦了。

因此,主机配置如下所示:

代码语言:javascript
复制
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
        }
    }
}

插件配置如下所示:

代码语言:javascript
复制
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
    }
}

(有很多这样的例子)

我的问题是如何将来自主机的消息发送到所有插件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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),然后定义一个集群路由器,与履行特定角色的参与者系统对话。

代码语言:javascript
复制
/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的配置中的以下部分配置节点的群集信息:

代码语言:javascript
复制
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 --以逗号分隔的字符串,用于定义这个特定节点的功能。它们更像标签。您可以在集群路由器中使用它们(就像我前面展示的那样),以明确您想要与哪些节点进行通信。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29134203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档