【发布时间】:2011-02-12 23:35:05
【问题描述】:
我正在尝试实现一个调度程序参与者,它要么处理请求,要么在失败的情况下将处理委托给另一个参与者(实际上它是指数退避算法)。 Dispatcher Actor 有一个布尔变量,用于决定如何路由处理。
在actor中保持某种状态是否正确?可能会出现什么问题?我应该使用交易者(akka)还是 STM 来避免问题? (我正在使用 akka 演员)
class DispatcherActor extends Actor {
var backoff = false
def receive = {
case SendMessage(registrationId, message) => {
if (backoff) {
//put on the queue
backoffManagerActor ! AddMessageToQueue(message)
} else {
httpClient.sendNotificationToClient(message, this)
}
}
case BackoffCompleted => //set backoff to false
backoff = false
}
def otherMethod = {
backoff=true
}
}
【问题讨论】:
-
你不应该永远将你的actor实例传递给其他代码,它违反了Actor模型。传递 'self' 引用(ActorRef)并发回消息。
标签: scala shared-memory actor akka