有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

处理异常后如何在java中重新启动thrift服务器?

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

共 (2) 个答案

  1. # 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循环)将使服务器保持活动状态,但如果连接到端口时出现问题,则打印堆栈跟踪,这些错误消息将丢失

  2. # 2 楼答案

    如果呼叫服务被阻塞,您可以执行以下操作:

    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
      }
    }