我正在尝试在功能测试中构建一个简单的编排引擎,如下所示:
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,等待响应,然后在适当的情况下移动到下一个。