我有一個使用TServlet類通過HTTP公開7個不同Apache Thrift servlet的系統(Java with Spring Framework)。目前,他們都需要自己的Servlet,ServletMappings,Processors,Handlers等,因此實現客戶端也必須保存不同服務的所有各種URL的內部列表。使用Apache Thrift和TServlet執行服務多路複用
據我所知,阿帕奇節儉使用TServer
及其衍生物使用TMultiplexingProcessor
當支持複用,但是因爲我使用Spring和我的servlet,處理程序和處理器是得到自動連接到彼此所有的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
等。