我不确定我是不是只想尝试用这个解决方案来压缩邮箱,但这就是我正在做的事情:
我有一个演员的财务应用程序,其工作是根据当前市场数据和客户职位组合计算一些分析。
我的演员的每条“工作”消息都包含已更改的市场数据的当前快照(自上次以来)以及对投资组合的更改(自上次以来),
在压力高峰时段 - 演员无法足够快地处理“工作”,因此邮箱开始缓冲“工作”消息。
问题:我的工作信息是不有损 - 所以我不能只丢弃它们并保留最新信息,但与此同时处理每条“工作”信息都非常浪费当演员越来越落后时,他们变得非常陈旧。
我的解决方案:我正在尝试实现一个自定义邮箱,如果没有当前邮件,则可以将邮件排队或将当前邮件替换为将旧工作与NewWork连接的新邮件。这样,当演员准备处理更多“工作”时,邮箱中的项目将是最新的累积信息。
我的问题:
错误:(98,38)无法在类InstrumentedMailbox中访问类Envelope中的构造函数Envelope val newEnvelope:Envelope = Envelope(mergedMessage,handle.sender)
似乎Envelope不喜欢被干扰。
This solution几乎是我想要的 - 除了我需要能够修改消息,我似乎无法弄清楚如何创建我自己的信封
感谢您的任何建议!
答案 0 :(得分:4)
我认为你确实在滥用邮箱。邮箱仅用于具有异步边界。它并不意味着使用复杂的用户代码进行自定义。
对于一个立即读取和组合消息的actor会更好,并根据请求将组合的消息发送给实际的工作人员(参见work-pulling pattern)