如何在Akka

时间:2015-06-23 09:10:01

标签: scala akka

我想记录发送和接收消息的事件,并使用它们对整个消息传递过程进行某种可视化。但是,我在实现配对这两个事件的可靠方式时遇到了问题:

  • 在派遣和到达时我只处理当前的演员和消息,后者是两个事件中唯一可用的东西,
  • 现在我使用消息类型和哈希码,但它不可靠 - 重写哈希码,从远程actor发送消息或重用相同的消息会导致无法正确配对事件,
  • 我被建议使用时间戳,但传输的持续时间是非零的,这只是启发式的。

唯一可靠的方法是为每条消息附加一些独特的信息,并使用它来连接事件,但手动包装和展开每条消息将是不优雅的,并且容易出错。

有没有办法在邮件中添加元数据?或者任何其他方法可靠地配对发送和接收消息的事件?

1 个答案:

答案 0 :(得分:-1)

这个怎么样?

object foo {

    // ID has a public getter and private setter
    trait Msg {
      private var _id = 0
      def id = _id
      private[foo] def id_=(value: Int): Unit = _id = value
    }

    // Companion object for the creation of Foo with an ID
    object Foo {
      def apply(id: Int, s: String): Foo = {
        val msg = Foo(s)
        msg.id = id
        msg
      }
    }

    // Private constructor => must be created from companion object
    case class Foo private (s: String) extends Msg

}

val msg = foo.Foo(42, "hello")
println(msg)
println(msg.id)

输出:

Foo(hello)
42

让所有邮件扩展Msg特征。 这样,只能在创建消息期间设置ID,然后才能设置为只读。