Мятеж Quarkus и блокировки потока Vertx при вызове параллелизма API на GCP CloudrunJAVA

Программисты JAVA общаются здесь
Anonymous
Мятеж Quarkus и блокировки потока Vertx при вызове параллелизма API на GCP Cloudrun

Сообщение Anonymous »

Я разработал небольшое приложение, чтобы воспроизвести и попытаться решить большую проблему производительности в большом проекте.
, мне нужно выполнить веб-сервис с огнем и установлением, который будет потреблять строку, проанализировать ее и получить информацию из 2 дистанционного API, чтобы я мог использовать их на карт-карт Mapper.import io.smallrye.mutiny.Uni;
import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.util.UUID;

...

@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
public Uni sendInfologOrderReleaseTest(Apin2Request message) throws InterruptedException {

infologOrderReleaseService.test(message.getContent())
.subscribe()
.with(
result -> {
}, // ignore
failure -> log.error("Fire-and-forget failed", failure)
);
return Uni.createFrom().item(Response.accepted().build());
}
< /code>
это призывы к службе < /p>
import io.smallrye.mutiny.Uni;
import jakarta.ws.rs.core.Response;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
...
public Uni test(String content) {
log.info("starting test");
Uni sourceSiteUni = testClient.getFilteredRdoSiteTransco();
Uni destinationSiteUni = testClient.getFilteredRdoSiteTransco();
return Uni.combine().all().unis(sourceSiteUni, destinationSiteUni)
.with((source, destination) -> {
log.info("starting mapping for source: {}, destination: {}", source.size(), destination.size());
log.info("end mapping");
return OrderReleaseDto.builder().build();
});

}
< /code>
, который сам называется одним и тем же веб -сервисом (для тестирования) < /p>
import io.smallrye.mutiny.Uni;
import jakarta.enterprise.inject.Default;
import jakarta.ws.rs.GET;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

import java.util.List;

@Default
@RegisterRestClient(configKey = "rdo-site-transco")
public interface TestClient {

@GET
Uni getFilteredRdoSiteTransco();
}
< /code>
На Intellij я не сталкиваюсь с проблемами, он прекрасно и мгновенно получает ответы, и я могу продолжить так, как хочу. Но как только он будет развернут в Google Cloud Run, я сталкиваюсь с какой -то утечкой потока, и я получил заблокированное предупреждение Vertx < /p>
2025-07-21 20:28:46.382 HAEC
2025-07-21 18:28:46,182 WARN [io.ver.cor.imp.BlockedThreadChecker] (vertx-blocked-thread-checker) Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 10594 ms, time limit is 2000 ms: io.vertx.core.VertxException: Thread blocked
2025-07-21 20:28:46.383 HAEC
at java.base/java.io.RandomAccessFile.readBytes0(Native Method)
2025-07-21 20:28:46.383 HAEC
at java.base/java.io.RandomAccessFile.readBytes(RandomAccessFile.java:400)
2025-07-21 20:28:46.383 HAEC
at java.base/java.io.RandomAccessFile.read(RandomAccessFile.java:434)
2025-07-21 20:28:46.383 HAEC
at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:498)
2025-07-21 20:28:46.383 HAEC
at java.base/java.util.zip.ZipFile$Source.readFullyAt(ZipFile.java:1528)
2025-07-21 20:28:46.383 HAEC
at java.base/java.util.zip.ZipFile$ZipFileInputStream.initDataOffset(ZipFile.java:930)
2025-07-21 20:28:46.383 HAEC
at java.base/java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:946)
2025-07-21 20:28:46.383 HAEC
at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:463)
2025-07-21 20:28:46.383 HAEC
at java.base/java.util.zip.InflaterInputStream.read(InflaterInputStream.java:175)
2025-07-21 20:28:46.383 HAEC
at io.quarkus.bootstrap.runner.JarResource$JarResourceDataProvider.apply(JarResource.java:73)
2025-07-21 20:28:46.383 HAEC
at io.quarkus.bootstrap.runner.JarResource$JarResourceDataProvider.apply(JarResource.java:59)
2025-07-21 20:28:46.383 HAEC
at io.quarkus.bootstrap.runner.JarFileReference.consumeSharedJarFile(JarFileReference.java:169)
2025-07-21 20:28:46.383 HAEC
at io.quarkus.bootstrap.runner.JarFileReference.withJarFile(JarFileReference.java:135)
2025-07-21 20:28:46.383 HAEC
at io.quarkus.bootstrap.runner.JarResource.getResourceData(JarResource.java:56)
2025-07-21 20:28:46.383 HAEC
at io.quarkus.bootstrap.runner.RunnerClassLoader.loadClass(RunnerClassLoader.java:106)
2025-07-21 20:28:46.383 HAEC
at io.quarkus.bootstrap.runner.RunnerClassLoader.loadClass(RunnerClassLoader.java:72)
2025-07-21 20:28:46.383 HAEC
at io.netty.handler.ssl.SslHandler$SslEngineType.forEngine(SslHandler.java:360)
2025-07-21 20:28:46.383 HAEC
at io.netty.handler.ssl.SslHandler.(SslHandler.java:480)
2025-07-21 20:28:46.383 HAEC
at io.netty.handler.ssl.SslContext.newHandler(SslContext.java:1076)
2025-07-21 20:28:46.383 HAEC
at io.netty.handler.ssl.DelegatingSslContext.newHandler(DelegatingSslContext.java:100)
2025-07-21 20:28:46.383 HAEC
at io.netty.handler.ssl.SslContext.newHandler(SslContext.java:1071)
2025-07-21 20:28:46.383 HAEC
at io.vertx.core.net.impl.SslChannelProvider.createClientSslHandler(SslChannelProvider.java:141)
2025-07-21 20:28:46.383 HAEC
at io.vertx.core.net.impl.ChannelProvider.initSSL(ChannelProvider.java:109)
2025-07-21 20:28:46.383 HAEC
at io.vertx.core.net.impl.ChannelProvider.access$200(ChannelProvider.java:41)
< /code>
Это не проблема с подключением, потому что я попробовал в двух различных средах (предприятие и личная среда), и эта проблема представляет собой воспроизведение предприятия. Metiny.vertx с инъекцией Vertx. Я потерян, и у меня больше нет идеи победить. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/797 ... oncurrency

Вернуться в «JAVA»