From 2afb20df0bf2d4e7efadd43d2326fbe891bed87d Mon Sep 17 00:00:00 2001 From: tjq Date: Sun, 8 Jan 2023 21:22:56 +0800 Subject: [PATCH] feat: use gatling to have a presure test for remote framework --- .../benchmark/PressureTestController.java | 10 ++++++-- .../remote/framework/engine/EngineOutput.java | 2 -- .../remote/akka/AkkaCSInitializer.java | 2 ++ .../powerjob/remote/akka/AkkaTransporter.java | 23 ++++--------------- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java index 24e5a263..c2f9fcc4 100644 --- a/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java +++ b/powerjob-remote/powerjob-remote-benchmark/src/main/java/tech/powerjob/remote/benchmark/PressureTestController.java @@ -36,12 +36,15 @@ public class PressureTestController { @GetMapping("/tell") public void httpTell(String protocol, Integer blockMs, Integer responseSize, String content) { - URL url = new URL().setLocation(HL).setAddress(new Address().setPort(SERVER_HTTP_PORT).setHost(HOST)); + Address address = new Address().setHost(HOST); + URL url = new URL().setLocation(HL).setAddress(address); final BenchmarkActor.BenchmarkRequest request = new BenchmarkActor.BenchmarkRequest().setContent(content).setBlockingMills(blockMs).setResponseSize(responseSize); try { if (Protocol.HTTP.name().equalsIgnoreCase(protocol)) { + address.setPort(SERVER_HTTP_PORT); engineService.getHttpTransporter().tell(url, request); } else { + address.setPort(SERVER_AKKA_PORT); engineService.getAkkaTransporter().tell(url, request); } } catch (Exception e) { @@ -53,14 +56,17 @@ public class PressureTestController { @GetMapping("/ask") public void httpAsk(String protocol, Integer blockMs, Integer responseSize, String content, Boolean debug) { - URL url = new URL().setLocation(HL).setAddress(new Address().setPort(SERVER_HTTP_PORT).setHost(HOST)); + Address address = new Address().setHost(HOST); + URL url = new URL().setLocation(HL).setAddress(address); final BenchmarkActor.BenchmarkRequest request = new BenchmarkActor.BenchmarkRequest().setContent(content).setBlockingMills(blockMs).setResponseSize(responseSize); try { CompletionStage responseOpt = null; if (Protocol.HTTP.name().equalsIgnoreCase(protocol)) { + address.setPort(SERVER_HTTP_PORT); responseOpt = engineService.getHttpTransporter().ask(url, request, BenchmarkActor.BenchmarkResponse.class); } else { + address.setPort(SERVER_AKKA_PORT); responseOpt = engineService.getAkkaTransporter().ask(url, request, BenchmarkActor.BenchmarkResponse.class); } final BenchmarkActor.BenchmarkResponse response = responseOpt.toCompletableFuture().get(); diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/EngineOutput.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/EngineOutput.java index 2bb2b999..b6d427d8 100644 --- a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/EngineOutput.java +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/EngineOutput.java @@ -1,11 +1,9 @@ package tech.powerjob.remote.framework.engine; -import com.google.common.collect.Maps; import lombok.Getter; import lombok.Setter; import tech.powerjob.remote.framework.transporter.Transporter; -import java.util.Map; /** * 引擎输出 diff --git a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java index 70af8292..f3681434 100644 --- a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java +++ b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java @@ -64,6 +64,8 @@ public class AkkaCSInitializer implements CSInitializer { // 处理系统中产生的异常情况 ActorRef troubleshootingActor = actorSystem.actorOf(Props.create(AkkaTroubleshootingActor.class), "troubleshooting"); actorSystem.eventStream().subscribe(troubleshootingActor, DeadLetter.class); + + log.info("[PowerJob-AKKA] initialize actorSystem[{}] successfully!", actorSystem.name()); } @Override diff --git a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaTransporter.java b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaTransporter.java index 4689ff77..8f82aefb 100644 --- a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaTransporter.java +++ b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaTransporter.java @@ -27,7 +27,6 @@ import java.util.concurrent.ExecutorService; */ public class AkkaTransporter implements Transporter { - private final ServerType serverType; private final ActorSystem actorSystem; private final String targetActorSystemName; @@ -37,22 +36,8 @@ public class AkkaTransporter implements Transporter { */ private static final String AKKA_NODE_PATH = "akka://%s@%s/user/%s"; - private static final Map SERVER_PATH_MAP = Maps.newHashMap(); - private static final Map WORKER_PATH_MAP = Maps.newHashMap(); - - /* - Akka 使用 ActorName + 入参类型 寻址,因此只需要 rootPath - HandlerLocation#rootPathName -> actorName - */ - static { - SERVER_PATH_MAP.put("benchmark", "benchmark"); - - WORKER_PATH_MAP.put("benchmark", "benchmark"); - } - public AkkaTransporter(ServerType serverType, ActorSystem actorSystem) { this.actorSystem = actorSystem; - this.serverType = serverType; this.targetActorSystemName = AkkaConstant.fetchActorSystemName(serverType, false); } @@ -76,12 +61,12 @@ public class AkkaTransporter implements Transporter { private ActorSelection fetchActorSelection(URL url) { - Map rootPath2ActorNameMap = serverType == ServerType.SERVER ? SERVER_PATH_MAP : WORKER_PATH_MAP; - final String actorName = rootPath2ActorNameMap.get(url.getLocation().getRootPath()); - CommonUtils.requireNonNull(actorName, "can't find actor by URL: " + url.getLocation()); + String targetActorName = AkkaMappingService.parseActorName(url.getLocation().getRootPath()).getActorName(); + + CommonUtils.requireNonNull(targetActorName, "can't find actor by URL: " + url.getLocation()); String address = url.getAddress().toFullAddress(); - return actorSystem.actorSelection(String.format(AKKA_NODE_PATH, targetActorSystemName, address, actorName)); + return actorSystem.actorSelection(String.format(AKKA_NODE_PATH, targetActorSystemName, address, targetActorName)); } }