这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions quarkus-modules/quarkus-extension/pom.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?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">
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.quarkus.extension</groupId>
<artifactId>quarkus-extension</artifactId>
Expand All @@ -18,6 +16,6 @@
<modules>
<module>quarkus-liquibase</module>
<module>quarkus-app</module>
<module>quarkus-load-shedding</module>
</modules>

</project>
</project>
134 changes: 134 additions & 0 deletions quarkus-modules/quarkus-extension/quarkus-load-shedding/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.baeldung.quarkus.extension</groupId>
<artifactId>quarkus-extension</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.baeldung.mathematics</groupId>
<artifactId>quarkus-load-shedding</artifactId>
<version>1.0.0-SNAPSHOT</version>

<properties>
<compiler-plugin.version>3.13.0</compiler-plugin.version>
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.19.3</quarkus.platform.version>
<skipITs>true</skipITs>
<surefire-plugin.version>3.5.2</surefire-plugin.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-load-shedding</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
<goal>native-image-agent</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${compiler-plugin.version}</version>
<configuration>
<parameters>true</parameters>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<systemPropertyVariables>
<native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>

<profiles>
<profile>
<id>native</id>
<activation>
<property>
<name>native</name>
</property>
</activation>
<properties>
<skipITs>false</skipITs>
<quarkus.native.enabled>true</quarkus.native.enabled>
</properties>
</profile>
</profiles>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.baeldung.quarkus;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Path("/factorial")
public class FactorialResource {
private static final Logger logger = LoggerFactory.getLogger(FactorialResource.class);

private final FactorialService factorialService;

public FactorialResource(FactorialService factorialService) {
this.factorialService = factorialService;
}

@GET
@Produces(MediaType.TEXT_PLAIN)
public String getFactorialSequence(@QueryParam("iterations") Integer iterations) {
if (iterations == null) {
iterations = 10;
}
logger.info("Generating factorial sequence with [" + iterations + "] iterations.");
List<Long> factorialSequence = factorialService.generateSequence(iterations);
return factorialSequence.toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.baeldung.quarkus;

import jakarta.enterprise.context.ApplicationScoped;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@ApplicationScoped
public class FactorialService {
private static final Logger logger = LoggerFactory.getLogger(FactorialService.class);

public List<Long> generateSequence(int iterations) {
long factorial = 1;

List<Long> generatedSequence = new ArrayList<>();
generatedSequence.add(factorial);
for (int i = 1; i <= iterations; i++) {
factorial *= i;
generatedSequence.add(factorial);
}

try {
int sleepTime = (int) (Math.random() * 14000) + 1000;
logger.info("Sleeping for [" + sleepTime + "] milliseconds.");
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}

return generatedSequence;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.baeldung.quarkus;

import jakarta.annotation.PostConstruct;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Path("/fibonacci")
public class FibonacciResource {
private static final Logger logger = LoggerFactory.getLogger(FibonacciResource.class);

private final FibonacciService fibonacciService;

public FibonacciResource(FibonacciService fibonacciService) {
this.fibonacciService = fibonacciService;
}

@GET
@Produces(MediaType.TEXT_PLAIN)
public String getFibonacciSequence(@QueryParam("iterations") Integer iterations) {
if (iterations == null) {
iterations = 10; //default value
}
logger.info("Received request with iterations: " + iterations);
List<Integer> fibSequence = fibonacciService.generateSequence(iterations);
return fibSequence.toString();
}


@PostConstruct
public void startLoad() {
for (int i = 0; i < Runtime.getRuntime().availableProcessors(); i++) {
new Thread(() -> {
while (true) {
Math.pow(Math.random(), Math.random()); // Keep CPU busy
}
}).start();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.baeldung.quarkus;

import jakarta.enterprise.context.ApplicationScoped;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@ApplicationScoped
public class FibonacciService {
private static final Logger logger = LoggerFactory.getLogger(FibonacciService.class);

public List<Integer> generateSequence(int nthNumber) {
int firstInteger = 0, secondInteger = 1;

List<Integer> generatedSequence = new ArrayList<>();
generatedSequence.add(firstInteger);
generatedSequence.add(secondInteger);
for (int i = 2; i <= nthNumber; i++) {
int next = firstInteger + secondInteger;
generatedSequence.add(next);
firstInteger = secondInteger;
secondInteger = next;
}

try {
int sleepTime = (int) (Math.random() * 14000) + 1000;
logger.info("Sleeping for [" + sleepTime + "] milliseconds.");
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}

return generatedSequence;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.baeldung.quarkus;

import jakarta.ws.rs.ext.Provider;
import io.quarkus.load.shedding.RequestPrioritizer;
import io.quarkus.load.shedding.RequestPriority;
import io.vertx.core.http.impl.HttpServerRequestWrapper;

@Provider
public class LoadRequestPrioritizer implements RequestPrioritizer<HttpServerRequestWrapper> {

@Override
public boolean appliesTo(Object request) {
return request instanceof HttpServerRequestWrapper;
}

@Override
public RequestPriority priority(HttpServerRequestWrapper request) {
String requestPath = request.path();
if (requestPath.contains("fibonacci")) {
return RequestPriority.CRITICAL;
} else {
return RequestPriority.NORMAL;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
quarkus.http.root-path=/api

quarkus.load-shedding.enabled=true
quarkus.load-shedding.max-limit=10
quarkus.load-shedding.initial-limit=5

quarkus.load-shedding.priority.enabled=true

quarkus.load-shedding.probe-factor=70

quarkus.load-shedding.alpha-factor=1
quarkus.load-shedding.beta-factor=5