Версия Spring выходит из строя, обычная версия Java - нет: «RESOURCE_EXHAUSTED: сообщение gRPC превышает максимальный раJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Версия Spring выходит из строя, обычная версия Java - нет: «RESOURCE_EXHAUSTED: сообщение gRPC превышает максимальный ра

Сообщение Anonymous »

Контекст
У меня есть две версии одной и той же программы. Один из них завернут в веб-приложение Spring, а другой представляет собой простое приложение Java. Эта программа использует библиотеку immudb4j, которая используется для связи с экземпляром ImmuDB.
Проблема
Эта программа состоит из метода, который неоднократно открывает сеанс с экземпляром ImmuDB, а затем сразу же закрывает его снова - очевидно, раньше это было нечто большее, но я сократил код до минимума, который все еще вызывает проблему.
Веб-версия Spring аварийно завершает работу на ImmuClient::openSession номер 19 или иногда 20, за следующим исключением:

Код: Выделить всё

io.grpc.StatusRuntimeException: RESOURCE_EXHAUSTED: gRPC message exceeds maximum size 4194304: 4784128
Однако простая программа Java не демонстрирует такого поведения. Кажется, она может работать бесконечно.
Почему версия Spring дает сбой, в то время как простая версия Java работает нормально?
После дальнейшего тестирования может оказаться, что эта проблема возникает из-за некоторой общей зависимости Spring Boot. и immudb4j. Сбой не происходит при использовании Spring Boot версии 3.3.0, только с версиями 3.3.1, 3.3.2 и 3.3.3.
Код
Обычная версия Java

Код: Выделить всё

public class Application {

private ImmuClient immuClient = ImmuClient.newBuilder()
.withServerUrl("localhost")
.withServerPort(3322)
.build();

public void openAndCloseSessionRepeatedly() {
int iteration = 1;
try {
while (true) {
immuClient.openSession("defaultdb", "immudb", "immudb");
immuClient.closeSession();
System.out.println("Iteration: " + iteration++);
}
} catch (Exception e) {
System.out.println("Crashed at request " + iteration + " due to:");
e.printStackTrace();
}
}

public static void main(String[] args) {
new Application().openAndCloseSessionRepeatedly();
}

}
Весенняя версия

Код: Выделить всё

@SpringBootApplication
@RestController
public class Application {

private ImmuClient immuClient = ImmuClient.newBuilder()
.withServerUrl("localhost")
.withServerPort(3322)
.build();

@PostMapping
public void openAndCloseSessionRepeatedly() {
int iteration = 1;
try {
while (true) {
immuClient.openSession("defaultdb", "immudb", "immudb");
immuClient.closeSession();
System.out.println("Iteration: " + iteration++);
}
} catch (Exception e) {
System.out.println("Crashed at request " + iteration + " due to:");
e.printStackTrace();
}
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}
Шаги по воспроизведению
Требуется экземпляр ImmuDB. Я использую версию 1.5.0, поскольку именно она предположительно поддерживается immudb4j: https://github.com/codenotary/immudb/re ... tag/v1.5.0. Просто скачайте исполняемый файл и запустите его. Если предпочтительнее, существует также версия в Docker Hub.
Версия immudb4j для Maven, похоже, использует устаревшие зависимости (см. https://github.com/codenotary/immudb4j/issues/67). ), поэтому вам придется перезаписать их в POM-файле следующим образом:

Код: Выделить всё

io.codenotary
immudb4j
1.0.1


io.grpc
grpc-protobuf
1.55.1


io.grpc
grpc-netty
1.55.1


io.grpc
grpc-stub
1.55.1

Версия Gradle, похоже, использует правильные зависимости, хотя я не тестировал эту версию.


Подробнее здесь: https://stackoverflow.com/questions/789 ... ted-grpc-m
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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