Akka自定义邮箱连接更新

时间:2015-08-12 02:22:55

标签: scala akka

我不确定我是不是只想尝试用这个解决方案来压缩邮箱,但这就是我正在做的事情:

我有一个演员的财务应用程序,其工作是根据当前市场数据和客户职位组合计算一些分析。

我的演员的每条“工作”消息都包含已更改的市场数据的当前快照(自上次以来)以及对投资组合的更改(自上次以来),

在压力高峰时段 - 演员无法足够快地处理“工作”,因此邮箱开始缓冲“工作”消息。

问题:我的工作信息是有损 - 所以我不能只丢弃它们并保留最新信息,但与此同时处理每条“工作”信息都非常浪费当演员越来越落后时,他们变得非常陈旧。

我的解决方案:我正在尝试实现一个自定义邮箱,如果没有当前邮件,则可以将邮件排队或将当前邮件替换为将旧工作与NewWork连接的新邮件。这样,当演员准备处理更多“工作”时,邮箱中的项目将是最新的累积信息。

我的问题:

  

错误:(98,38)无法在类InstrumentedMailbox中访问类Envelope中的构造函数Envelope             val newEnvelope:Envelope = Envelope(mergedMessage,handle.sender)

似乎Envelope不喜欢被干扰。

This solution几乎是我想要的 - 除了我需要能够修改消息,我似乎无法弄清楚如何创建我自己的信封

感谢您的任何建议!

1 个答案:

答案 0 :(得分:4)

我认为你确实在滥用邮箱。邮箱仅用于具有异步边界。它并不意味着使用复杂的用户代码进行自定义。

对于一个立即读取和组合消息的actor会更好,并根据请求将组合的消息发送给实际的工作人员(参见work-pulling pattern