【问题标题】:Akka, dropping earlier messagesAkka,丢弃较早的消息
【发布时间】:2019-10-08 22:48:51
【问题描述】:

我想删除某个演员之前的消息。基本思想是在每条消息上都有一个时间戳,将其存储为最后处理的消息消息,并丢弃早于该时间戳的消息。

我正在考虑为此创建邮箱,但我不知道:

  1. 如果在邮箱中保存状态是个好主意。
  2. 如何与邮箱共享参与者的状态(具有时间戳)。

也许我正在尝试做错事,有更好的选择吗?

谢谢

【问题讨论】:

  • 你能解释一下吗?你的意思是每条消息都会有时间戳吗?
  • 你的意思是每条消息都会有一个时间戳? - 然后你可以在actor中有一个lastProcessed var并检查每条消息,然后决定是否处理并更新lastProcessed var消息没有时间戳,每当actor收到它时,它都会附加时间戳?在这种情况下,将按顺序接收和处理每条消息,我不知道时间戳在这种情况下如何发挥作用。你能详细解释一下你想达到什么目标吗?

标签: scala akka


【解决方案1】:

为此编写自定义邮箱是多余的。你可以这样解决:

class MyActor extends Actor {

  val timestampLimit: LocalDateTime = ???

  def receive = {
    case m: Message if (m.getTimeStamp.isBefore(timestampLimit)) => // drop
    case m: Message                                              => // process
  } 
}

【讨论】:

  • 是的,这是我的第一个想法,然后我认为将其隐藏在邮箱后面是个好主意。但我越来越不相信这个想法。我的第二个方法是组合接收器,以便“过滤逻辑”仍然部分隐藏在“主”接收器中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多