在Akka文档中(https://doc.akka.io/docs/akka/current/general/addressing.html)每种定义如下:
逻辑参与者路径:通过遵循指向根监护人的父监视链接获得的唯一路径称为逻辑参与者路径。此路径与参与者的创建祖先完全匹配,因此,只要参与者系统的远程处理配置(以及路径的地址组件)被设置,它就完全是确定的。
物理参与者路径:虽然逻辑参与者路径描述了一个参与者系统内的功能位置,但基于配置的远程部署意味着可以在不同于其父级的网络主机上创建参与者,即在不同的参与者系统内创建参与者。在这种情况下,从根guardian向上跟随参与者路径需要遍历网络,这是一个代价高昂的操作。因此,每个参与者也有一个物理路径,从实际参与者对象所在的参与者系统的根守护者开始。当查询其他参与者时,使用此路径作为发送方引用将允许他们直接回复到此参与者,从而最大限度地减少路由产生的延迟。
我的问题是:一个参与者及其父对象如何可能存在于不同的参与者系统中?有人能解释一下如何理解物理路径吗?通过阅读Akka文档我对actor系统的理解(https://doc.akka.io/docs/akka/current/general/actor-systems.html)每个参与者系统都从一个根参与者开始,然后是它的子参与者,然后是它的孙子参与者。因此,根据定义,每个参与者的父级都驻留在同一个参与者系统中。也许是我对演员制度定义的理解是错的?
理解逻辑参与者路径和物理参与者路径之间的区别很重要。
基于角色的分布式系统的性能可能取决于此。
远程部署意味着可以在与其父级不同的网络主机上创建参与者,即在不同的参与者系统中创建参与者。在这种情况下,从根guardian向上跟随参与者路径需要遍历网络,这是一个代价高昂的操作。因此,每个参与者也有一个物理路径,从实际参与者对象所在的参与者系统的根守护者开始。当查询其他参与者时,使用此路径作为发送方引用将允许他们直接回复到此参与者,从而最大限度地减少路由产生的延迟。https://getakka.net/articles/concepts/addressing.html
请注意,逻辑路径定义了参与者的监督层次结构,物理路径显示了参与者部署的位置。物理参与者路径永远不会跨越多个参与者系统。
那句话有什么不对?参与者可以是分布式的,这意味着它可以位于同一主机或完全不同的主机上。根据孩子所在的位置,您可以执行以下操作之一:
"akka://my-sys/user/service-a/worker1" // purely local
"akka.tcp://my-sys@host.example.com:5678/user/service-b" // remote
如果您关心远程监控,它将以与本地监控相同的方式工作。请查看此处的文档:
https://doc.akka.io/docs/akka/2.5.4/scala/remoting.html#watching-远程演员
首先,重要的是要注意,Akka的设计明确考虑了位置透明度。因此,它被设计为能够在多个不同的“节点”(即不同的JVM实例,或者运行在不同的物理机上,或者封装到不同的虚拟机中)组成的集群上运行,而代码变化最小,甚至没有变化。例如,您可以将Akka配置为在远程机器上创建一些参与者,也可以从代码中执行相同的操作。在Akka文档中,“参与者系统”没有区分为“逻辑”和“物理”系统。在本文中,您提到的称为“Actor系统”的东西实际上是我们可以称之为“物理Actor系统”的东西,即在单个JVM中运行的东西。但是在一个参与者系统中使用上面链接的配置可以将远程参与者创建到另一个物理JVM进程中,即在不同的参与者系统中。这就是“逻辑路径”和“物理路径”的概念变成现实的时候。
希望这澄清留档位。
我的用例是,我想建立一个运行Akka Actors的节点集群。每个参与者都是同一参与者的实例,用于处理与特定用户的WebSocket连接。每个参与者都将使用唯一的路径注册自己。在非集群设置中,我可以简单地通过其路径调用actor,如其中,是actor实例的唯一名称。我必须将消息传递给这些参与者,这样他们才能将消息发送回各自的WebSocket客户端。 显然Akka集群提供了各种设置:http://
``` 所以,我的问题是--有没有一种干净的方法来结构和重构路由,而不是将它们集中在一个大的路由定义中?我也许可以创建一个参与者(路由器)的层次结构,主路由定义只是将其委托给路由器,随着我们深入参与者层次结构,我们会逐步添加更多的细节。但是否有一两种普遍接受的模式来组织路线呢?
有人能解释一下(如果可能的话,用一些代码或参考)独立路由器和自包含的路由器参与者之间有什么区别吗? 提前谢谢你。 编辑: 与此相比有何不同?: 在性能或能力方面有什么区别吗?
例如,我有两个演员——一个家长演员和一个孩子演员。当父级收到消息时,它会产生消息中指定的尽可能多的子角色。如何测试此功能?有没有一种方法可以模拟上下文,或者其他一些方法来检查参与者的创建是否正确和数量是否正确? 更新:基于@Tim answer的解决方案 更改类别: 测试:
参与者可以使用API或命令行添加到参与者库中。 在你开始之前 在你执行这些步骤之前,你在业务网络定义中必须建模一个参与者,并将其部署为业务网络。 下面的过程显示了一个使用以下数字财产范例业务网络定义的参与者模型的示例:digitalproperty-network 请注意:如果你使用composer participant add命令添加参与者,请确保参与者的JSON陈述包裹在单引号中。 name
我有一个AKKA模型,有一个主管演员,他创造了许多儿童演员。子参与者将处理一个事件并将消息发送到另一个服务(例如Kafka topic)。 目前,我有一个静态共享类,它在子参与者之间共享以发送消息,但在参与者模型中,我认为最好使用参与者来实现这一目的。 我想知道我如何才能创造一个演员,儿童演员可以分享它。如果supervisor actor创建了MessagePublisher actor,那么孩
composer participant add命令将参与者的新实例添加到参与者库中。查看“ 添加参与者 ”任务,了解使用此命令或API的演练。 data选项必须包含一个代表要添加的参与者的序列化JSON串,并且必须用单引号包裹。 句法 composer participant add composer participant add [options] Participant options
概念 A Participant(参与者)是业务网络中的行为人(actor)。参与者可能是一个组织的分支。参与者可以创建资产,并与其他参与者交换资产。参与者通过提交交易来处理资产。 参与者拥有一组Identity文档,可以用来证明参与者的身份。例如,一个人可能有一个或多个以下身份文档证明他们是谁: 护照 驾驶执照 指纹 视网膜扫描 SSL证书 在Hyperledger Composer中,参与者可