Java网络编程-API监测

  • Post author:
  • Post category:java


实现一个用于监测 API 接口可用性的线程类,其作用是通过发送 HTTP 请求到指定的 API 接口,并监测接口的可用性。

代码中的

APIThread

类继承自

Thread

,意味着它可以在单独的线程中执行。



run

方法中,使用

HttpURLConnection

建立与 API 接口的连接,并发送 HTTP 请求。通过设置连接超时时间、请求方法和请求头部信息,可以根据需要自定义 API 请求的配置。

在获取到 API 接口的响应后,根据响应的 HTTP 状态码和返回的内容,判断 API 接口的可用性。如果响应的状态码为

HttpURLConnection.HTTP_OK

,表示 API 接口正常工作,根据返回的内容和预设的

returnMsg

进行比较,来确定 API 接口的返回状态。如果返回内容与预设的

returnMsg

一致,表示 API 接口返回正常,否则表示返回异常。根据判断结果,通过调用

monApiService

更新监控 API 接口的状态。

如果无法建立连接或出现其他异常情况,也会将监控 API 接口的状态更新为异常。

此线程在每次请求完成后会等待一段时间(这里是 5000 毫秒),然后再次发起请求。通过

running

变量控制线程的运行状态,当调用

stopThread

方法时,将设置

running



false

,从而终止线程的执行。

请注意,该代码片段中使用了一些自定义的类和接口,例如

IMonApiService

,这些类和接口在代码中没有给出具体实现。因此,要使代码正常运行,需要确保相关的类和接口已经正确实现,并且适配于你的应用程序环境

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class APIThread extends Thread{


    private volatile boolean running = true;
    private Long apiId;
    private String apiURL;
    private String method;
    private Integer timeout = 3000;
    private String header;

    private String returnMsg;

    private IMonApiService monApiService;

    private String status = "";

    private String checkStatus = "";

    public APIThread(Long apiId, String apiURL, String method,Integer timeout, String header,String returnMsg, IMonApiService monApiService){
        this.apiId = apiId;
        this.apiURL = apiURL;
        this.method = method;
        this.header = header;
        this.returnMsg = returnMsg;
        this.timeout = timeout;
        this.monApiService = monApiService;
    }

    public void stopThread() {
        running = false;
    }

    public void run() {
        while (running){
            try {
                URL url = new URL(apiURL);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setConnectTimeout(timeout);
                connection.setRequestMethod(method);
                if(StringUtils.isNotBlank(header)&&header.startsWith("token:")){
                    connection.setRequestProperty("token", header.replace("token:",""));
                }else{
                    connection.setRequestProperty("Authorization", "Bearer "+header);
                }
                // 创建一个 StringBuilder 对象,用于保存 HTTP 响应的内容
                StringBuilder response = new StringBuilder();

                // 获取 HTTP 响应输入流
                InputStream inputStream = connection.getInputStream();

                // 使用 BufferedReader 对象读取输入流中的数据,并将其添加到 StringBuilder 对象中
                try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
                    String line;
                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                    }
                }

                // 输出 HTTP 响应内容
//                System.out.println(response.toString());
                String res = response.toString();
                int responseCode = connection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
//                    System.out.println("API is working fine");
                        if(StringUtils.isBlank(returnMsg)||"#".equals(returnMsg)){
                            if(!"open".equals(status)) {
                                monApiService.updateMonApiStatus(apiId, Status.OPEN);
                                status = "open";
                                checkStatus = "";
                            }
                        }else{
                            if(StringUtils.isNotBlank(res)&&res.equals(returnMsg)){
                                if(!"open".equals(checkStatus)) {
//                                    System.out.println("API return fine");
                                    monApiService.updateMonApiStatus(apiId, Status.OPEN);
                                    checkStatus = "open";
                                    status="";
                                }
                            }else{
                                if(!"close".equals(checkStatus)) {
//                                    System.out.println("API return error");
                                    monApiService.updateMonApiStatus(apiId, Status.CLOSE);
                                    checkStatus = "close";
                                    status="";
                                }
                            }
                        }

                } else {
//                    System.out.println("API is not working. Response code: " + responseCode);
                    if(!"close".equals(status)) {
                        monApiService.updateMonApiStatus(apiId, Status.CLOSE);
                        status = "close";
                        checkStatus = "";
                    }
                }
            } catch (Exception ex) {
//                ex.printStackTrace();
//                System.out.println("API is not working. Exception: " + ex.getMessage());
                if(!"close".equals(status)) {
                    monApiService.updateMonApiStatus(apiId, Status.CLOSE);
                    status = "close";
                    checkStatus = "";
                }
            }
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

    }


}



版权声明:本文为qq_21454973原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。