我的应用程序有一个使用SprayCan的API。在应用程序中,任何阻塞代码都为每个特定资源都有一个单独的调度程序。
是否有必要通过使用自己的Dispatcher配置API服务来保护API服务不受阻止?
通常的做法是将路由器用于API服务来处理更大容量的请求吗?
class MyService extends Actor with HttpService {...}
val service = system.actorOf(MyService.props(...).withDispatcher(???))
答案 0 :(得分:2)
是否有必要保护API服务不被阻止 通过配置它自己的Dispatcher来应用它?
通常没有必要。使用Spray检查作为默认配置的reference.conf
,看看该调度程序是否满足您的需求。如果没有,请提供自定义的。
通常的做法是将路由器用于API服务 处理更大容量的请求?
通常请求被移交给另一个Actor以解除阻塞路由或以Future
运行(可能在单独的线程池中)。请在此处查看所有可用选项:How does spray.routing.HttpService dispatch requests?。
最后,您不应该阻止路由处理程序,因为它会阻止您的服务。从您的描述中可以看出,您的阻止代码以Future
或类似方式运行。只要它不使路由处理程序等待结果/阻塞它就没问题。