2013-02-22 67 views
1

我目前正在实施一个系统,为Akka收到的消息调用API方法。这非常简单,并且不涉及对Akka有深入了解的任何事情。Akka批处理/单项处理

实际的API虽然允许我们也提出批量请求(类似JSON-RPC批处理调用,这里描述:http://www.jsonrpc.org/specification)。方法的返回值不会改变,但排队会。

我的想法是检查队列中是否有多条消息,并且在一次API调用中一次处理所有消息,而不是单独进行数百次(当然要分别回复所有消息)。

Akka有可能吗?

回答

2

没有这样的内置构造。你可以做的是在你的处理演员面前有一个配角演员。当配料角色得到新的回复时,它开始建立一个批次。

处理器参与者可以询问批处理actor何时准备处理下一批处理。此时,批处理执行者会在一条消息中发送迄今收集的所有消息。

当然,根据API调用的方式和时间,实际模式会有所不同。

但是在你开始建立这样的模式之前,你应该实际测量性能。我个人更喜欢演员做精细的工作,而不是大块。如果你在一次接受行动中做了太多工作,你可能会减少公平。

如果你能降低公平住潜在的(虽然不一定)更高的吞吐量,你应该看看默认调度员的“吞吐量”设置:

# Throughput defines the maximum number of messages to be 
# processed per actor before the thread jumps to the next actor. 
# Set to 1 for as fair as possible.