Java网络编程-API监测

实现一个用于监测 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 方法时,将设置 runningfalse,从而终止线程的执行。

请注意,该代码片段中使用了一些自定义的类和接口,例如 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);
            }
        }

    }


}

你可能感兴趣的:(JAVA随记,java,api)