【发布时间】:2017-07-18 12:38:25
【问题描述】:
我想定义一个可以与 Akka actor 混合的 trait,它会在某个有限的持续时间后安排接收超时。这是我想要做的草图......
trait BidderInActivityClearingSchedule[T <: Tradable, A <: Auction[T, A]]
extends ClearingSchedule[T, A] {
this: AuctionActor[T, A] =>
context.setReceiveTimeout(timeout) // can I call this here?
def timeout: FiniteDuration
override def receive: Receive = {
case ReceiveTimeout =>
val (clearedAuction, contracts) = auction.clear
contracts.foreach(contract => settlementService ! contract)
auction = clearedAuction
case message => this.receive(message)
}
}
class FancyAuctionActor[T <: Tradable](val timeout: FiniteDuration, ...)
extends AuctionActor[T, FancyAuctionActor[T]]
with BidderInActivityClearingSchedule[T, FancyAuctionActor[T]]
...但我不明白什么时候会调用context.setReceiveTimeout。当MyFancyAuctionActor 被调用时,它会作为构造函数的一部分被调用吗?还是会因为timeout 尚未定义而提前调用并因此引发某种错误。
【问题讨论】:
标签: scala akka mixins akka-actor