与Akka的交叉服务呼叫

与Akka的交叉服务呼叫,akka,akka-cluster,akka-remote-actor,akka.net,Akka,Akka Cluster,Akka Remote Actor,Akka.net,我正在使用最新发布的Akka.NET1.0(祝贺发布!),所以这对我来说都是全新的,但我很确定任何有JVM Akka经验的人都可以加入进来,因为这个问题中没有任何依赖于运行时的东西 让我们考虑几个(作为示例,2)单独的服务,它们是更大的系统/应用程序的一部分。这些服务通常做自己的事情,但有时需要跨服务呼叫。假设service2可以是独立的,并且有一个GetStuff操作服务1有一个DoSomething操作,它必须首先获得GetStuff操作的结果 当两个服务可以分别部署到不同的机器上时,处理这

我正在使用最新发布的Akka.NET1.0(祝贺发布!),所以这对我来说都是全新的,但我很确定任何有JVM Akka经验的人都可以加入进来,因为这个问题中没有任何依赖于运行时的东西

让我们考虑几个(作为示例,2)单独的服务,它们是更大的系统/应用程序的一部分。这些服务通常做自己的事情,但有时需要跨服务呼叫。假设

service2
可以是独立的,并且有一个
GetStuff
操作<代码>服务1有一个
DoSomething
操作,它必须首先获得
GetStuff
操作的结果

当两个服务可以分别部署到不同的机器上时,处理这种情况的首选方法是什么

正如我所说,我对Akka了解不多,但通过挖掘示例、文档和源代码,我发现了两种选择:

  • 远程处理。使用
    Remoting
    从远程主机获取
    ActorSelection
    ,在各自的服务中分离actor系统。这将是几乎一样的,只是两个演员系统将是平等的“客户端”
  • 集群。我正试着去想这个问题,现在我能想到的最多的就是设置一个单独的集群服务,它只需要设置集群系统,创建一个简单的侦听器参与者,这样种子节点就可以被正确初始化(?)。然后,在它们自己的服务中创建的每个单独的参与者系统将以不同的角色加入到所述集群系统中
  • 也许还有另一个我不知道的解决方案

    就个人而言,集群解决方案乍一看似乎更难掌握和设置,但可能有一些我现在看不到的显著优势


    重申一下,处理这种情况的首选方法是什么?我应该注意什么?

    Akka.Cluster取决于Akka.Remote-以下是它们的根本不同之处:

    • Akka.Remote-允许您与远程进程中运行的参与者系统进行连接和通信。可以是完全独立的代码库,运行完全不同的Akka.NET应用程序(“服务”,如果您愿意的话)。在两个系统之间进行通信所需的只是一组在两个进程中都可见的共享消息类
    • Akka.Cluster是Akka.Remote之上的一个抽象,它消除了您的每个服务实例必须知道您可能需要连接到的每个其他可能服务实例的显式地址的需要。这些可以是相同服务的实例,也可以是不同服务的实例。通过非常简单的“种子节点”策略实现服务的动态发现

    我建议您看看我写的-它展示了如何使用Akka.Cluster“roles”特性动态地对不同服务中的节点进行跨服务调用,而不必显式地定义它们的任何网络地址。特别是,看看我是如何使用“群集感知”路由器来实现这一点的。

    谢谢!这几乎是完美的,非常接近我想要的,虽然有点复杂。不管怎么说,似乎工作得很好,即使我自己的示例应用程序松散地基于它没有:)我想我在某个地方配置错了,我必须把它全部弄清楚,这里有很多东西我还没有弄清楚。据我所知,集群应该是解决这个问题的默认方式,谢谢!快速而小的问题,我试图缩小我的“不工作”的问题,我有一个非常小且自包含的示例,其中从另一个流程调用参与者选择没有任何作用(但在同一个流程中工作)-哪里是链接repo的最佳位置,以便我可以询问如何配置集群?我试图根据您给出的示例调整配置,但现在有点“太多了…”