【发布时间】:2014-07-26 15:40:06
【问题描述】:
我有一个系统(带有 Spring 框架的 Java),它使用 TServlet 类通过 HTTP 公开 7 个不同的 Apache Thrift servlet。目前,它们都需要自己的 Servlet、ServletMappings、处理器、处理程序等,因此实现客户端还必须为不同服务保留所有各种 URL 的内部列表。
我知道 Apache Thrift 在使用 TServer 及其衍生产品时支持多路复用 TMultiplexingProcessor,但是由于我使用的是 Spring,并且我的 Servlet、Handler 和 Processor 都是 Spring Bean,它们会自动连接到彼此中,所以我'我不确定如何继续。
以下是其中一项服务如何连接的示例:
UserServiceHandler.java
@Component
public class UserServiceHandler implements UserService.Iface {
@Override
public User getUser(String userId) throws TException {
// implementation logic goes here
}
}
UserServiceProcessor.java
@Component
public class UserServiceProcessor extends UserService.Processor<UserServiceHandler> {
private UserServiceHandler handler;
@Autowired
public UserServiceProcessor(UserServiceHandler iface) {
super(iface);
handler = iface;
}
public UserServiceHandler getHandler() {
return handler;
}
public void setHandler(UserServiceHandler handler) {
this.handler = handler;
}
}
UserServiceServlet.java
@Component
public class UserServiceServlet extends TServlet {
private UserServiceProcessor processor;
@Autowired
public UserServiceServlet(UserServiceProcessor p) {
super(p, new TBinaryProtocol.Factory());
processor = p;
}
}
Servlet 注册
ServletRegistration.Dynamic userService = servletContext.addServlet("UserServiceServlet", (UserServiceServlet) ctx.getBean("userServiceServlet"));
userService.setLoadOnStartup(1);
userService.addMapping("/api/UserService/*");
// This same block repeated 7 times for each *ServiceServlet with different mappings
我想让所有 7 个服务处理程序都映射到单个 URL,例如 /api/*。这甚至可能吗?我想我必须创建一个 servlet 和处理器,但我不确定它们应该是什么样子。我的处理器扩展 UserService.Processor 等。
【问题讨论】:
标签: java spring servlets thrift