diff --git a/request-test/src/main/java/cn/mayiming/App.java b/request-test/src/main/java/cn/mayiming/App.java index 93abe3a..083c6ac 100644 --- a/request-test/src/main/java/cn/mayiming/App.java +++ b/request-test/src/main/java/cn/mayiming/App.java @@ -1,13 +1,78 @@ package cn.mayiming; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + /** * Hello world! * */ public class App { - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); + // 网关地址(请根据你的实际环境修改) + private static final String GATEWAY_URL = "http://localhost:8080/order"; + // 请求体JSON数据 + private static final String REQUEST_BODY = "{\"username\":\"admin\"}"; + // 总请求次数 + private static final int TOTAL_REQUESTS = 30; + + public static void main(String[] args) { + // 1. 创建HttpClient实例(设置超时时间10秒) + HttpClient httpClient = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(10)) + .executor(Executors.newFixedThreadPool(5)) // 线程池,控制并发数 + .build(); + + // 2. 循环发送30次请求 + for (int i = 1; i <= TOTAL_REQUESTS; i++) { + int requestNum = i; // 内部类引用需要final,所以定义临时变量 + try { + // 构建POST请求 + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(GATEWAY_URL)) + .header("Content-Type", "application/json") // 指定JSON格式 + .POST(HttpRequest.BodyPublishers.ofString(REQUEST_BODY)) + .timeout(Duration.ofSeconds(10)) + .build(); + + // 发送请求并获取响应 + HttpResponse response = httpClient.send( + request, + HttpResponse.BodyHandlers.ofString() + ); + + // 3. 解析响应结果,判断是否成功 + int statusCode = response.statusCode(); + boolean isSuccess = statusCode >= 200 && statusCode < 300; + + // 打印请求结果 + System.out.printf("第 %d 次请求:%s | 状态码:%d | 响应体:%s%n", + requestNum, + isSuccess ? "成功" : "失败", + statusCode, + response.body().length() > 200 ? response.body().substring(0, 200) + "..." : response.body() + ); + + // 可选:每次请求后短暂休眠,避免压垮网关(可根据需要调整) + TimeUnit.MILLISECONDS.sleep(100); + + } catch (Exception e) { + // 捕获所有异常,标记请求失败 + System.out.printf("第 %d 次请求:失败 | 异常信息:%s%n", + requestNum, + e.getMessage() + ); + } + } + + // 4. 关闭线程池,释放资源 + ((ExecutorService) httpClient.executor().get()).shutdown(); + System.out.println("\n===== 30次请求发送完成 ====="); } }