1

我正在寻找使用 Akka 来解决以下问题的设计模式。假设我有一个包含大量记录事件的大文件。我启动一个处理文件的actor(Master),并为每个事件向actor池发送一条消息以进行处理(解析、转换等......),然后它们将结果发送回Master以序列化最终结果每个事件的。处理事件独立于其他事件。

所以我的第一个想法是使用Future.traverse呼叫并等待整个列表。但我担心性能,因为处理事件是一项细粒度的任务,创建大的 Futures 列表可能会占用内存并消耗性能。

是否有任何模式可以让我使用?运算符(即开即忘)但同时确认所有事件已处理的时间?

4

2 回答 2

3

我会让处理器参与者向主机请求批量工作,并在完成后确认每批工作。

于 2012-07-26T10:22:48.913 回答
1

在处理 Actor 时,我喜欢推理它们的实现方式:

  • Actors 处理来自他们邮箱的消息
  • 邮箱是一个fifo队列
  • 保证一个actor在处理下一条消息之前已经完成了一条消息的处理。

我想到了两个解决方案,绝对不是唯一的一个:

  • 在发送方记录您路由了多少条消息,并让处理器参与者在完成后发送确认。也许 FMS 会在这方面为您提供帮助。

  • 分层组织消息的路由和“确认”机制。这在我看来是最优雅的模式。

于 2012-07-26T08:31:10.747 回答