具有长 运行 任务的队列的 Actor 设计
Actor design for queue with a long running task
我有一堆 actor 运行 需要将要按顺序处理的任务排队,一次处理一个。我需要一个演员来处理队列中的任务。创建一个演员并将对该演员的引用作为参数传递给每个作业(隐式队列)是否可以?例如
演员:
class QActor extends Actor{
def receive = {
case input => sender ! doSomething(input)
}
}
发件人
val future = myQActor ? msg
Await.result(future)
使用另一个 actor 及其邮箱作为队列是可以的,只是不要阻塞发件人。
您的方法看起来不错,但有一点需要注意。询问模式 (?
) 需要一个隐式超时,如果没有收到回复,则 Future 将失败并出现超时错误。如果您有多个参与者同时询问您的 QActor
哪个按顺序处理每个请求,则可能很难知道设置什么是合理的超时。最好使用 myQActor ! msg
并在发件人的 Receive
中实施处理程序来处理预期的响应。
我有一堆 actor 运行 需要将要按顺序处理的任务排队,一次处理一个。我需要一个演员来处理队列中的任务。创建一个演员并将对该演员的引用作为参数传递给每个作业(隐式队列)是否可以?例如
演员:
class QActor extends Actor{
def receive = {
case input => sender ! doSomething(input)
}
}
发件人
val future = myQActor ? msg
Await.result(future)
使用另一个 actor 及其邮箱作为队列是可以的,只是不要阻塞发件人。
您的方法看起来不错,但有一点需要注意。询问模式 (?
) 需要一个隐式超时,如果没有收到回复,则 Future 将失败并出现超时错误。如果您有多个参与者同时询问您的 QActor
哪个按顺序处理每个请求,则可能很难知道设置什么是合理的超时。最好使用 myQActor ! msg
并在发件人的 Receive
中实施处理程序来处理预期的响应。