2

我是 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();
    }
}
4

2 回答 2

1

我已更改为更好的解决方案。

main在 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 进程/服务器现在是从Supervisor启动的,它会密切关注进程并在它死亡时重新生成它,而原始解决方案(使用 while 循环)将使服务器保持活动状态,但如果存在则打印堆栈跟踪连接到端口时出现问题,这些错误消息将被遗漏。

于 2010-02-08T09:41:00.933 回答
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
  }
}
于 2009-04-15T13:56:00.953 回答