我是java的新手,并在java中编写了一个小但非常重要的thrift服务。
我注意到它偶尔会在没有任何错误消息的情况下停止服务;似乎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();
}
}
答案 0 :(得分:1)
我已经改为更好的解决方案了。
我在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循环)将使服务器保持活动但打印堆栈跟踪如果连接到端口时出现问题,则会遗漏这些错误消息。
答案 1 :(得分:0)
如果对服务的调用阻止,您可以执行以下操作:
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
}
}