Akka 如何联系集群中的远程参与者



首先我想说,我对Akka和演员:)很陌生

我想创建一个分布式应用程序。我将应用程序拆分为 Web 部件 (REST API( 和用户管理部件。但是,从应用程序的另一部分访问Actor的正确方法是什么?

我知道我可以通过提供地址 (https://doc.akka.io/docs/akka/2.5/remoting.html#looking-up-remote-actors( 来访问演员选择,但是有没有一种方法我不必使用地址?

我只想创建一个系统,在不使用其地址的情况下可以轻松联系到远程参与者。

在集群分片中,参与者身份是persistanceId的,并且必须是发送到整个集群的消息的一部分。这就是为什么您需要定义extractEntityId.

在文档中阅读更多内容: https://doc.akka.io/docs/akka/2.5/cluster-sharding.html

也许你可以看看 分布式发布 在群集中订阅

但限制是:托管本地参与者的本地Actor系统和托管远程Actor的远程Actor系统应配置为akka cluster

如果集群可以作为您的设计,那么您可以执行以下操作:

远程部分:

class Subscriber extends Actor with ActorLogging {
import DistributedPubSubMediator.{ Subscribe, SubscribeAck }
val mediator = DistributedPubSub(context.system).mediator
// subscribe to the topic named "content"
mediator ! Subscribe("content", self)
def receive = {
case s: String ⇒
log.info("Got {}", s)
case SubscribeAck(Subscribe("content", None, `self`)) ⇒
log.info("subscribing")
}
}

局部部分:

class Publisher extends Actor {
import DistributedPubSubMediator.Publish
// activate the extension
val mediator = DistributedPubSub(context.system).mediator
def receive = {
case in: String ⇒
val out = in.toUpperCase
mediator ! Publish("content", out)
}
}

远程部分Actor订阅content topic,如果本地部分想与远程通信,它可以直接发布消息给content topic

希望它能给你一些想法。

相关内容

  • 没有找到相关文章

最新更新