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()
方法 - 它会运行循环读取(将阻塞直到有数据),然后写入数据。
我的问题:
pollTopic()
内的读取调用会阻止。答案 0 :(得分:3)
回答您的观点2以及您尝试做的事情的描述,或许您想考虑将Akka streams与reactive-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
将成为您的朋友