[英]How can I re-spawn a thrift server in java after an exception?
我是Java的新手,并用Java编写了一个小型但非常重要的节俭服务。
我注意到它偶尔会停止投放而不会出现任何错误消息; 看来Java进程只是随机死亡,没有堆栈跟踪或异常。
确保即使发生错误后此过程仍然有效的最佳方法是什么? 这是主要功能,如果有帮助的话:
public static void main(String [] args) {
try {
MyAppServiceHandler handler = new MyAppServiceHandler();
MyApp.Processor processor = new MyApp.Processor(handler);
TServerTransport serverTransport = new TServerSocket(8080);
TServer server = null;
server = new TSimpleServer(processor, serverTransport);
System.out.println("Starting thrift server...");
server.serve();
}
catch (TTransportException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
我已更改为更好的解决方案。
我在Java中的main
功能如下:
public static void main(String [] args) {
try {
MyAppServiceHandler handler = new MyAppServiceHandler();
MyApp.Processor processor = new MyApp.Processor(handler);
TServerTransport serverTransport = new TServerSocket(8080);
TServer server = null;
server = new TSimpleServer(processor, serverTransport);
System.out.println("Starting thrift server...");
server.serve();
}
catch (TTransportException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
这会使服务器死掉,这与我最初的解决方案所要的相违背。 但是,java进程/服务器现在是从Supervisor启动的,它会监视该进程并在进程死后重新生成它,而原始解决方案(使用while循环)将保持服务器处于活动状态,但如果有进程则打印堆栈跟踪连接端口时出现问题,这些错误消息将丢失。
如果服务呼叫被阻止,您可以执行以下操作:
public static void main(String [] args) {
while(true){
try {
MyAppServiceHandler handler = new MyAppServiceHandler();
MyApp.Processor processor = new MyApp.Processor(handler);
TServerTransport serverTransport = new TServerSocket(8080);
TServer server = null;
server = new TSimpleServer(processor, serverTransport);
System.out.println("Starting thrift server...");
server.serve();
}
catch (TTransportException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
//do cleanup
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.