performance test
This commit is contained in:
parent
9b32085279
commit
942df51f6d
@ -83,6 +83,15 @@ x-xss-protection: 1; mode=block
|
|||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Performance
|
||||||
|
|
||||||
|
```
|
||||||
|
Benchmark Mode Cnt Score Error Units
|
||||||
|
NormalizedFeignLoggerBenchmarkTest.testFeignWithoutLogger thrpt 25 16281.625 ± 279.774 ops/s
|
||||||
|
NormalizedFeignLoggerBenchmarkTest.testNormalizedFeignLogger thrpt 25 6081.675 ± 229.912 ops/s
|
||||||
|
NormalizedFeignLoggerBenchmarkTest.testSlf4jFeignLogger thrpt 25 16593.059 ± 151.327 ops/s
|
||||||
|
```
|
||||||
|
|
||||||
# How to use
|
# How to use
|
||||||
|
|
||||||
In order to use Normalized Logger into the application they must the following.
|
In order to use Normalized Logger into the application they must the following.
|
||||||
|
91
logger-testing/pom.xml
Normal file
91
logger-testing/pom.xml
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>me.bvn13.openfeign.logger</groupId>
|
||||||
|
<artifactId>feign-normalized-logger</artifactId>
|
||||||
|
<version>0.1.5-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>me.bvn13.openfeign.logger.test</groupId>
|
||||||
|
<artifactId>logger-testing</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>me.bvn13.openfeign.logger</groupId>
|
||||||
|
<artifactId>feign-normalized-logger</artifactId>
|
||||||
|
<version>0.1.4</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>${slf4j.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-jdk14</artifactId>
|
||||||
|
<version>${slf4j.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
|
<artifactId>jetty-server</artifactId>
|
||||||
|
<version>${jetty-server.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
|
<artifactId>jetty-servlet</artifactId>
|
||||||
|
<version>${jetty-server.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
|
<artifactId>jmh-core</artifactId>
|
||||||
|
<version>${jmh.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
|
<artifactId>jmh-generator-annprocess</artifactId>
|
||||||
|
<version>${jmh.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.github.openfeign</groupId>
|
||||||
|
<artifactId>feign-core</artifactId>
|
||||||
|
<version>${feign.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.github.openfeign</groupId>
|
||||||
|
<artifactId>feign-gson</artifactId>
|
||||||
|
<version>${feign.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.github.openfeign</groupId>
|
||||||
|
<artifactId>feign-slf4j</artifactId>
|
||||||
|
<version>${feign.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,107 @@
|
|||||||
|
package me.bvn13.openfeign.logger.normalized;
|
||||||
|
|
||||||
|
import feign.Feign;
|
||||||
|
import feign.Logger;
|
||||||
|
import feign.gson.GsonDecoder;
|
||||||
|
import feign.slf4j.Slf4jLogger;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.openjdk.jmh.annotations.Benchmark;
|
||||||
|
import org.openjdk.jmh.annotations.Scope;
|
||||||
|
import org.openjdk.jmh.annotations.Setup;
|
||||||
|
import org.openjdk.jmh.annotations.State;
|
||||||
|
import org.openjdk.jmh.annotations.TearDown;
|
||||||
|
import org.openjdk.jmh.annotations.Warmup;
|
||||||
|
|
||||||
|
import static me.bvn13.openfeign.logger.normalized.TestJettyServer.PORT;
|
||||||
|
|
||||||
|
public class NormalizedFeignLoggerBenchmarkTest {
|
||||||
|
@State(Scope.Benchmark)
|
||||||
|
public static class BenchmarkStateWithoutLogging {
|
||||||
|
TestJettyServer jettyServer;
|
||||||
|
TestFeignClient feignClient;
|
||||||
|
|
||||||
|
@Setup
|
||||||
|
public void init() {
|
||||||
|
jettyServer = new TestJettyServer();
|
||||||
|
jettyServer.start();
|
||||||
|
feignClient = Feign.builder()
|
||||||
|
.decoder(new GsonDecoder())
|
||||||
|
.target(TestFeignClient.class, "http://localhost:" + PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TearDown
|
||||||
|
public void tearDown() {
|
||||||
|
jettyServer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@State(Scope.Benchmark)
|
||||||
|
public static class BenchmarkStateWithSlf4jLogging {
|
||||||
|
TestJettyServer jettyServer;
|
||||||
|
TestFeignClient feignClient;
|
||||||
|
|
||||||
|
@Setup
|
||||||
|
public void init() {
|
||||||
|
jettyServer = new TestJettyServer();
|
||||||
|
jettyServer.start();
|
||||||
|
feignClient = Feign.builder()
|
||||||
|
.logger(new Slf4jLogger())
|
||||||
|
.logLevel(Logger.Level.FULL)
|
||||||
|
.decoder(new GsonDecoder())
|
||||||
|
.target(TestFeignClient.class, "http://localhost:" + PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TearDown
|
||||||
|
public void tearDown() {
|
||||||
|
jettyServer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@State(Scope.Benchmark)
|
||||||
|
public static class BenchmarkStateWithNormalizedLogging {
|
||||||
|
TestJettyServer jettyServer;
|
||||||
|
TestFeignClient feignClient;
|
||||||
|
|
||||||
|
@Setup
|
||||||
|
public void init() {
|
||||||
|
jettyServer = new TestJettyServer();
|
||||||
|
jettyServer.start();
|
||||||
|
feignClient = Feign.builder()
|
||||||
|
.logger(new NormalizedFeignLogger())
|
||||||
|
.logLevel(Logger.Level.FULL)
|
||||||
|
.decoder(new GsonDecoder())
|
||||||
|
.target(TestFeignClient.class, "http://localhost:" + PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TearDown
|
||||||
|
public void tearDown() {
|
||||||
|
jettyServer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
@Warmup(iterations = 3)
|
||||||
|
public void testFeignLogger(BenchmarkStateWithoutLogging benchmarkState) {
|
||||||
|
final ResponseDto status = benchmarkState.feignClient.getStatus();
|
||||||
|
Assertions.assertEquals("ok", status.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
@Warmup(iterations = 3)
|
||||||
|
public void testSlf4jFeignLogger(BenchmarkStateWithSlf4jLogging benchmarkState) {
|
||||||
|
final ResponseDto status = benchmarkState.feignClient.getStatus();
|
||||||
|
Assertions.assertEquals("ok", status.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
@Warmup(iterations = 3)
|
||||||
|
public void testNormalizedFeignLogger(BenchmarkStateWithNormalizedLogging benchmarkState) {
|
||||||
|
final ResponseDto status = benchmarkState.feignClient.getStatus();
|
||||||
|
Assertions.assertEquals("ok", status.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
org.openjdk.jmh.Main.main(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package me.bvn13.openfeign.logger.normalized;
|
||||||
|
|
||||||
|
public class ResponseDto {
|
||||||
|
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseDto setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package me.bvn13.openfeign.logger.normalized;
|
||||||
|
|
||||||
|
import jakarta.servlet.ServletException;
|
||||||
|
import jakarta.servlet.http.HttpServlet;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class TestBlockingServlet extends HttpServlet {
|
||||||
|
|
||||||
|
protected void doGet(HttpServletRequest request,
|
||||||
|
HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
response.setContentType("application/json");
|
||||||
|
response.setStatus(HttpServletResponse.SC_OK);
|
||||||
|
response.getWriter().println("{ \"status\": \"ok\"}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package me.bvn13.openfeign.logger.normalized;
|
||||||
|
|
||||||
|
|
||||||
|
import feign.RequestLine;
|
||||||
|
|
||||||
|
public interface TestFeignClient {
|
||||||
|
|
||||||
|
@RequestLine("GET /status")
|
||||||
|
ResponseDto getStatus();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package me.bvn13.openfeign.logger.normalized;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.server.Connector;
|
||||||
|
import org.eclipse.jetty.server.Server;
|
||||||
|
import org.eclipse.jetty.server.ServerConnector;
|
||||||
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
|
|
||||||
|
public class TestJettyServer {
|
||||||
|
|
||||||
|
public static final int PORT = 8090;
|
||||||
|
private Server server;
|
||||||
|
|
||||||
|
public TestJettyServer() {
|
||||||
|
server = new Server();
|
||||||
|
ServerConnector connector = new ServerConnector(server);
|
||||||
|
connector.setPort(PORT);
|
||||||
|
server.setConnectors(new Connector[] {connector});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
ServletHandler servletHandler = new ServletHandler();
|
||||||
|
server.setHandler(servletHandler);
|
||||||
|
servletHandler.addServletWithMapping(TestBlockingServlet.class, "/status");
|
||||||
|
new Thread(() -> {
|
||||||
|
try {
|
||||||
|
server.start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
try {
|
||||||
|
server.stop();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TestJettyServer jettyServer;
|
||||||
|
jettyServer = new TestJettyServer();
|
||||||
|
try {
|
||||||
|
jettyServer.start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
logger/pom.xml
Normal file
35
logger/pom.xml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>me.bvn13.openfeign.logger</groupId>
|
||||||
|
<artifactId>feign-normalized-logger</artifactId>
|
||||||
|
<version>0.1.5-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>logger</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.github.openfeign</groupId>
|
||||||
|
<artifactId>feign-core</artifactId>
|
||||||
|
<version>${feign.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>${slf4j.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -18,7 +18,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
* <pre>
|
* <pre>
|
||||||
* {@code
|
* {@code
|
||||||
*
|
*
|
||||||
* normalized feign request (HERE-IS-CLASS-AND-METHOD): [
|
* Normalized feign request (HERE-ARE-CLASS-AND-METHOD): [
|
||||||
*
|
*
|
||||||
* ] has response [
|
* ] has response [
|
||||||
*
|
*
|
36
pom.xml
36
pom.xml
@ -9,7 +9,12 @@
|
|||||||
<artifactId>feign-normalized-logger</artifactId>
|
<artifactId>feign-normalized-logger</artifactId>
|
||||||
<version>0.1.5-SNAPSHOT</version>
|
<version>0.1.5-SNAPSHOT</version>
|
||||||
|
|
||||||
<packaging>jar</packaging>
|
<modules>
|
||||||
|
<module>logger</module>
|
||||||
|
<module>logger-testing</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<name>OpenFeign Normalized Logger</name>
|
<name>OpenFeign Normalized Logger</name>
|
||||||
<description>Normalized Logger for OpenFeign</description>
|
<description>Normalized Logger for OpenFeign</description>
|
||||||
@ -42,8 +47,13 @@
|
|||||||
<nexus-staging-maven-plugin.version>1.6.13</nexus-staging-maven-plugin.version>
|
<nexus-staging-maven-plugin.version>1.6.13</nexus-staging-maven-plugin.version>
|
||||||
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
|
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
|
||||||
<gitflow-maven-plugin.version>1.18.0</gitflow-maven-plugin.version>
|
<gitflow-maven-plugin.version>1.18.0</gitflow-maven-plugin.version>
|
||||||
</properties>
|
|
||||||
|
|
||||||
|
<!-- Testing -->
|
||||||
|
<junit.version>5.9.0</junit.version>
|
||||||
|
<jetty-server.version>11.0.11</jetty-server.version>
|
||||||
|
<jmh.version>1.35</jmh.version>
|
||||||
|
<httpclient.version>4.5.13</httpclient.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
<repository>
|
<repository>
|
||||||
@ -53,28 +63,6 @@
|
|||||||
</repository>
|
</repository>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.github.openfeign</groupId>
|
|
||||||
<artifactId>feign-core</artifactId>
|
|
||||||
<version>${feign.version}</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>slf4j-api</artifactId>
|
|
||||||
<version>${slf4j.version}</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
<version>4.12</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>feign-normalized-logger</finalName>
|
<finalName>feign-normalized-logger</finalName>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user