1

我的应用程序有一个使用 SprayCan 的 API。在应用程序中,任何阻塞代码对每个特定资源都有一个单独的调度程序。

是否有必要通过配置它自己的 Dispatcher 来保护 API 服务不被应用程序阻塞?

将路由器用于 API 服务以处理更大容量的请求也是常见的做法吗?

 class MyService extends Actor with HttpService {...}

 val service = system.actorOf(MyService.props(...).withDispatcher(???))
4

1 回答 1

2

是否有必要通过配置它自己的 Dispatcher 来保护 API 服务不被应用程序阻塞?

通常不需要。使用 Spray检查reference.conf该配置是否作为默认配置,以查看该调度程序是否会满足您的需求。如果没有,请提供自定义的。

将路由器用于 API 服务以处理更大容量的请求也是常见的做法吗?

通常请求被移交给另一个 Actor 以解除对路由的阻塞或作为Future(可能在单独的线程池上)运行。在此处查看所有可用选项:spray.routing.HttpService 如何调度请求?.

最后,您不应该阻塞路由处理程序,因为它会阻塞您的服务。从您的描述中,听起来您的阻塞代码以 aFuture或类似方式运行。只要它不让路由处理程序等待结果/块就可以了。

于 2015-12-16T02:59:18.527 回答