如何在Thrift中使用不同的线程池处理请求?

时间:2013-09-20 08:20:00

标签: thrift

我有一种有两种方法的节俭服务 1.响应processSync(Request req):此方法同步处理请求并返回响应。客户端线程被阻塞,直到服务器完全处理请求为止 2. void processAsync(Request req):此方法用于异步处理。这里,只要服务器完全收到请求,调用就会返回而没有输出。客户端线程不会等到服务器处理请求。

使用具有单独线程的ThreadedSelectorServer来读取/写入和处理线程。要求是在方法级别使用单独的线程池。这是因为可能会发生所有处理线程忙于同步请求。使用异步api的客户端可能会超时。我希望给予两个api相同的权重,以便在服务器充满同步请求的情况下;异步请求不会受到影响。

考虑使用两种不同的服务,一种只使用同步方法,另一种只使用异步服务。但在这种情况下,必须启动两个节俭服务器,这需要两个不同的端口。我希望避免这样做。

有关如何实现这一目标的任何建议吗?

1 个答案:

答案 0 :(得分:0)

是的,使用多路复用协议 introduced with Thrift 0.9.1。它允许多个服务共享相同的传输。请注意,服务器和客户端都必须使用Multiplex协议层才能成功。

顺便提一下,考虑将异步方法设为单向

Service whatever {
  oneway void processAsync(1: Request req) 
}