繁体   English   中英

发生异常后,如何在Java中重新产生Thrift服务器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM