Akka Actor在初始化消息后运行无限循环

时间:2016-04-07 14:32:43

标签: scala akka actor

Akka和Actors的新手 - 我需要开始一些演员,他们基本上会花时间阅读Kafka主题并写入Ignite缓存。我配置了这样的调度员:

kafka-dispatcher {
  executor  = "thread-pool-executor"
  type      = PinnedDispatcher
}

我的演员是用.withDispatcher("kafka-dispatcher")创建的,我的假设是每个演员都会被分配一个单独的线程。

这些演员基本上都是这样过的:

override def receive: Receive = LoggingReceive {
  case InitWorker => {
    initialize()
    pollTopic() // This never returns
  }
}

换句话说,它们会收到一条初始化消息,然后调用永不返回的pollTopic()方法 - 它会运行循环读取(将阻塞直到有数据),然后写入数据。

我的问题:

  1. 这是犹太人吗?
  2. 有更好的,即更惯用的方法吗?请注意,pollTopic()内的读取调用会阻止。

1 个答案:

答案 0 :(得分:3)

回答您的观点2以及您尝试做的事情的描述,或许您想考虑将Akka streamsreactive-kafka库结合使用。 Akka流使用幕后的演员,但为你管理所有这些,所以你只关注实现可重用的小组件,只做一件事。

然后,您将能够使用Kafka作为数据流的 string before_split = "pune,mumbai|01234,333,222,delhi|65432,Bhopal|09231,jabalpur|0987765"; string[] split1 = before_split.Split(','); List<string> finalSplit = new List<string>(); string aux = ""; foreach (string s in split1) { if (s.IndexOf('|') == -1) aux = aux + s + ','; else { if (aux == "") aux = s; else aux = aux + s; finalSplit.Add(aux); aux = ""; } } 来编写数据处理管道。我不太了解Ignite缓存,但您可能会为其编写Source或者 - 如果您正在谈论阻止API,Sink将成为您的朋友