当前位置: 首页 > 知识库问答 >
问题:

分布式邮箱Akka actor系统设计

霍永年
2023-03-14

我想创建一个基于AKKA的分布式电子邮件邮箱系统。当我的应用程序启动时,我想创建所有收件箱参与者,并在他们上启动调度器,以接收邮件的时间间隔为10秒。但是有一个问题是如何创建这些收件箱角色?是否可以在集群上创建actor或获得对它的引用(如果它存在的话)?Actor名称可以是数据库中的邮箱UUID,群集中只能存在一个具有特定UUID的Actor。

最重要的问题是如何在集群中创建以uuid为名称的actor,或者在它存在的情况下获取对它的引用?我尝试以下配置:

actor {
    provider = "akka.cluster.ClusterActorRefProvider"
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    log-remote-lifecycle-events = on
    netty.tcp {
      hostname = "127.0.0.1"
      port = 2552
    }
  }

  cluster {
    seed-nodes = [
      "akka.tcp://mailbox@127.0.0.1:2552"]
}

和此代码来创建执行元或获取对它的引用

def createActorIfNotExists(actorSystem: ActorSystem, name: String, props: Props)
                            (implicit ec: ExecutionContext): Unit = {
    implicit val timeout = Timeout(5 seconds)

    actorSystem.actorSelection(name).resolveOne() onComplete {
      case Success(actor) =>
        Logger.debug(s"Actor already created $name")
      case Failure(ex) =>
        Logger.debug(s"Creating actor $name")
        val actor = actorSystem.actorOf(props, name)
    }
  }

但是上面的代码在本地执行元系统上创建执行元,而不是在集群上创建执行元(下一个节点创建自己的执行元,而不是选择现有)。

对于发件箱,我也想到了调度器执行器。Dispatcher将是集群单例,并将消息发送给正确的actor Childs。但它可能是瓶颈?

例如,singleton的执行元路径可以是/users/mailboxs,而对于特定的发件箱/users/mailboxs/uuid

共有1个答案

费德宇
2023-03-14

听起来你想做的和Akka集群分片相当匹配。

它允许您使用id来寻址参与者,并负责在集群中平衡参与者。

您可以在以下文档中阅读更多关于它的内容:http://doc.akka.io/docs/akka/2.4/scala/cluster-sharding.html#cluster-sharding-scala

 类似资料:
  • 主要内容:一、从一个新闻门户网站案例引入,二、推算一下你需要分析多少条数据?,三、黄金搭档:分布式存储+分布式计算这篇文章聊一个话题:什么是分布式计算系统? 一、从一个新闻门户网站案例引入 现在很多同学经常会看到一些名词,比如分布式服务框架,分布式系统,分布式存储系统,分布式消息系统。 但是有些经验尚浅的同学,可能都很容易被这些名词给搞晕。所以这篇文章就对“分布式计算系统”这个概念做一个科普类的分析。 如果你要理解啥是分布式计算,就必须先得理解啥是分布式存储,现在我们从一个小例子来引入。 比如说

  • 被别人指出问题时,别管别人能不能做到,看别人说的对不对,然后完善自己。别人能不能做到是别人的事情,自己能不能做到关系到自己能否发展的更好。——hustlihaifeng Go语言号称是互联网时代的C语言。现在的互联网系统已经不是以前的一个主机搞定一切的时代,互联网时代的后台服务由大量的分布式系统构成,任何单一后台服务器节点的故障并不会导致整个系统的停机。同时以阿里云、腾讯云为代表的云厂商崛起标志着

  • 数据存储容量的问题。 数据读写速度的问题。 数据可靠性的问题。 几种常见 RAID 的对比|名称|优点|缺点| |------|------|------| |RAID 0|使用 N 块磁盘的 RAID 0,将数据从内存写入磁盘时,将数据分成 N 块,并发写入,读取同理。所以,读写速度是单盘的 N 倍。|任何一块盘损坏,数据完整性破坏,数据不可用。| |RAID 1|数据写入磁盘时,将一份数据同时

  • 万法皆空,因果不空。 随着摩尔定律碰到瓶颈,越来越多的系统要依靠分布式集群架构来实现海量数据处理和可扩展计算能力。 区块链首先是一个分布式系统。 中央式结构改成分布式系统,碰到的第一个问题就是一致性的保障。 很显然,如果一个分布式集群无法保证处理结果一致的话,那任何建立于其上的业务系统都无法正常工作。 本章将介绍分布式系统中一些核心问题的来源以及相关的工作。

  • 一、介绍 HDFS (Hadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。 二、HDFS 设计原理 2.1 HDFS 架构 HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成: NameNode : 负责执行有关 文件系统命名空间 的操作,例如打开,

  • 主要内容:一、从一个新闻门户网站案例引入,二、推算一下你需要分析多少条数据?,三、黄金搭档:分布式存储+分布式计算这篇文章聊一个话题:什么是分布式计算系统? 一、从一个新闻门户网站案例引入 现在很多同学经常会看到一些名词,比如分布式服务框架,分布式系统,分布式存储系统,分布式消息系统。 但是有些经验尚浅的同学,可能都很容易被这些名词给搞晕。所以这篇文章就对“分布式计算系统”这个概念做一个科普类的分析。 如果你要理解啥是分布式计算,就必须先得理解啥是分布式存储,现在我们从一个小例子来引入。 比如说