代码之家  ›  专栏  ›  技术社区  ›  Jan Wytze

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

  •  0
  • Jan Wytze  · 技术社区  · 6 年前

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

    我想创建一个分布式应用程序。我将在web部件(rest api)和用户管理部件中分割应用程序。但是,从应用程序的另一部分访问参与者的正确方法是什么?

    我知道我可以通过提供演员选择的地址来访问( https://doc.akka.io/docs/akka/2.5/remoting.html#looking-up-remote-actors )但是有没有办法让我不用处理地址?

    我只想创建一个系统,不需要使用地址就可以很容易地联系到远程参与者。

    2 回复  |  直到 6 年前
        1
  •  0
  •   lasekio    6 年前

    在集群分片中,演员身份是 persistanceId 必须是发送给整个集群的消息的一部分。这就是为什么你需要定义 extractEntityId .

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

        2
  •  0
  •   atline    6 年前

    也许你可以找一下 Distributed Publish Subscribe in Cluster

    但限制是:承载本地actor的本地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)
      }
    }
    

    远程角色参与者订阅 content topic ,如果本地部分希望与远程部分对话,它可以将消息发布到 内容主题 是的。

    希望能给你一些想法。