Akka doc讨论了各种看似相互关联的Akka技术,但没有区分它们:
我的理解是" Akka Networking"只是一个模块/ lib,它使Akka能够通过TCP与远程actor系统通信。 Akka Remoting是另一个模块/ lib(未包含在核心Akka JAR中),它为Akka提供了Gossip协议的使用。而Akka Clustering是另一个模块/ lib,然后使用这些Gossip协议允许远程actor系统聚集在一起,并以病毒/服务发现的方式改变变化。而我对Akka ZeroMQ的理解是它完成与Akka Clustering相同的事情,除了使用ZeroMQ作为网络连接和协议(而不是Gossip)的基础。
首先,如果我对这些不同模块/库的理解不正确,请先纠正我!
假设我或多或少在这里目标,那么我主要担心的是我可能使用Akka Clustering(因而是Gossip)试图与Remote Actor System 2(RAS2)进行通信的Remote Actor System 1(RAS1) )使用Akka ZeroMQ。在这种情况下,我们使用两种完全不同的群集技术和协议,这是否意味着这两个远程系统无法相互通信,或者需要特别小心采取这样,使他们彼此兼容?
答案 0 :(得分:1)
Akka Remoting允许一个演员与另一台机器上的另一个演员交谈。要让Akka Remoting工作,您需要知道要与之交谈的actor的特定IP地址(或主机名),ActorSystem名称和Actor路径。 ActorSystem名称在两台机器中可以不同。
Akka Clustering消除了必须知道您正在与之交谈的特定计算机的问题(通过群集感知路由或通过侦听加入或离开群集的计算机的接待员)。群集感知路由还允许在群集中的任何计算机上运行最少的X个实例。 Akka Clustering使用Gossip协议来维护集群成员列表。启用群集的应用程序必须知道必须始终运行的至少一个主机的地址才能加入群集。可能有2,3或更多,但想法是至少其中一个必须始终。 Akka Clustering建立在Akka Remoting之上。
虽然我还没有与Akka ZeroMQ合作,但我认为它与Akka AMQP的工作方式类似。我认为它更像是Remoting的替代品,因为它使不同机器上的演员能够相互交谈,其优点是没有任何演员需要知道有关演员正在运行的任何其他机器的任何细节。但是,与Remoting一样,您需要手动创建接收消息的actor,而使用Clustering时,群集会负责(只要您正确配置了路由器)。
关于你的上一个问题。我可以考虑让群集与Akka ZeroMQ交谈的最简单方法是在群集中有一个(或几个?)演员与ZeroMQ演员交谈(即,你实际上可以混合和匹配)。让一个actor在集群内部监听队列,并让另一个演员将该消息发布到队列中。适配器模式的排序。