【发布时间】:2014-08-10 22:32:04
【问题描述】:
我正在尝试在功能测试中构建一个简单的编排引擎,如下所示:
object Engine {
def orchestrate(apiSequence : Seq[Any]) {
val execUnitList = getExecutionUnits(apiSequence) // build a specific list
schedule(execUnitList) // call multiple APIs
}
在下面调用的方法(getExecutionUnits 和 schedule)中,我应用的模式是我逐步构建一个列表(因此,不是 val 而是一个 var),遍历列表并调用特定 API 并运行每个都有一些自定义验证。
我知道 scala 中的对象有点等同于单例(因此在我的例子中只有一个 Engine 实例)。如果我期望同时调用 100 次 Orchestrate 方法,我想知道这是否是一个合适的模式。我不管理 Engine 对象中的任何其他内部变量,我只是对方法中提供的参数进行操作。假设 schedule 方法最多需要 10 秒,我担心并发访问时的行为。如果client1、client2和client3同时调用这个方法,会不会有2个客户端排队被我当前正在处理的客户端阻塞?
是否有更安全的惯用方式来处理用例?您是否建议使用演员来包装“编排”方法来处理并发请求?
编辑:澄清一下,这两个方法(getExecutionUnits 和 schedule)是绝对必要的,并按顺序调用。此外, schedule 方法依次调用多个 API(1 到 10 之间的任意位置),并且它们也按顺序执行很重要。截至目前,我有一个简单的 for 循环,一次处理 1 个 Api,等待响应,然后在适当的情况下移动到下一个。
【问题讨论】:
标签: multithreading scala singleton-methods