Цель состоит в том, чтобы выполнить 3 задачи в последовательности: рассматривать их как одноразовое, когда приложение начинается - например, очистка данных, преобразование и нагрузка. Ниже приведен пример игрушки для демонстрации: < /p>
Задача 1: имеет вызовы к методам блокировки, такими как загрузка данных из ведер GCP. < /P>
< /li>
Задача 2: не блокирующее преобразование данных < /p>
< /li>
Задача 3: Загрузка данных в Postgres DB с использованием Hibernate Reactive Panach. рабочая ветка. Использование RunSubScriptionOn или есть лучший подход, включая изменение дизайна. Как сохранить задачу 2 и задачу 3 в исходном потоке? , это приведет к проблемам Hibernate Reactive Panache, поскольку он нуждается в петле событий Vertx. Есть ли лучший способ? < /P>
< /li>
< /ul>
Пожалуйста, посоветуйте, есть ли лучший способ сделать это, учитывая упор. (Попытка перейти к реактивному подходу, но на некоторое время застряла по этому вопросу. Открыть для всех предложений.) < /P>
import io.quarkus.runtime.StartupEvent;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.infrastructure.Infrastructure;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import org.jboss.logging.Logger;
@ApplicationScoped
public class QuarkusBlockingExample
{
private static final Logger logger = Logger
.getLogger(QuarkusBlockingExample.class);
void onStart(@Observes StartupEvent ev)
{
logger.info("Log 1: QuarkusBlockingExample onStart is starting...");
executeDataPipeline().subscribe().with(
success -> logger.info("Log 5: executeDataPipeline completed."),
failure -> logger.error("Log 5f: executeDataPipeline failed",
failure));
logger.info("Log 8: QuarkusBlockingExample onStart is finished.");
}
public Uni executeDataPipeline()
{
logger.info("Log 2: Starting executeDataPipeline");
return Uni.createFrom().voidItem().onItem()
.transformToUni(unused -> task1WithBlocking()).onItem()
.transformToUni(unused -> task2NonBlocking()).onItem()
.transformToUni(unused -> task3NonBlockingDB()).onItem()
.invoke(() -> logger
.info("Log 7: Processing initialisation complete."));
}
public Uni task1WithBlocking()
{
return Uni.createFrom().voidItem().invoke(this::blockingMethod)
.runSubscriptionOn(Infrastructure.getDefaultWorkerPool())
.invoke(() -> logger
.info("Log 4: Completed task1WithBlocking."))
.replaceWithVoid();
}
public Uni task2NonBlocking()
{
return Uni.createFrom().voidItem().invoke(
() -> logger.info("Log 5: Completed task2NonBlocking."));
}
public Uni task3NonBlockingDB()
{
return Uni.createFrom().voidItem().invoke(() -> logger.info(
"Log 6: Completed DB load using Reactive Hibernate Panache."));
}
private void blockingMethod()
{
try
{
Thread.sleep(2000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
logger.info("Log 3: Blocking method executed.");
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ext-thread
Quarkus with Mutiny: поиск советов по запуску блокировки кода и контекста/управления потоками? ⇐ JAVA
Программисты JAVA общаются здесь
1738086314
Anonymous
Цель состоит в том, чтобы выполнить 3 задачи в последовательности: рассматривать их как одноразовое, когда приложение начинается - например, очистка данных, преобразование и нагрузка. Ниже приведен пример игрушки для демонстрации: < /p>
Задача 1: имеет вызовы к методам блокировки, такими как загрузка данных из ведер GCP. < /P>
< /li>
Задача 2: не блокирующее преобразование данных < /p>
< /li>
Задача 3: Загрузка данных в Postgres DB с использованием Hibernate Reactive Panach. рабочая ветка. Использование RunSubScriptionOn или есть лучший подход, включая изменение дизайна. Как сохранить задачу 2 и задачу 3 в исходном потоке? , это приведет к проблемам Hibernate Reactive Panache, поскольку он нуждается в петле событий Vertx. Есть ли лучший способ? < /P>
< /li>
< /ul>
Пожалуйста, посоветуйте, есть ли лучший способ сделать это, учитывая упор. (Попытка перейти к реактивному подходу, но на некоторое время застряла по этому вопросу. Открыть для всех предложений.) < /P>
import io.quarkus.runtime.StartupEvent;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.infrastructure.Infrastructure;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import org.jboss.logging.Logger;
@ApplicationScoped
public class QuarkusBlockingExample
{
private static final Logger logger = Logger
.getLogger(QuarkusBlockingExample.class);
void onStart(@Observes StartupEvent ev)
{
logger.info("Log 1: QuarkusBlockingExample onStart is starting...");
executeDataPipeline().subscribe().with(
success -> logger.info("Log 5: executeDataPipeline completed."),
failure -> logger.error("Log 5f: executeDataPipeline failed",
failure));
logger.info("Log 8: QuarkusBlockingExample onStart is finished.");
}
public Uni executeDataPipeline()
{
logger.info("Log 2: Starting executeDataPipeline");
return Uni.createFrom().voidItem().onItem()
.transformToUni(unused -> task1WithBlocking()).onItem()
.transformToUni(unused -> task2NonBlocking()).onItem()
.transformToUni(unused -> task3NonBlockingDB()).onItem()
.invoke(() -> logger
.info("Log 7: Processing initialisation complete."));
}
public Uni task1WithBlocking()
{
return Uni.createFrom().voidItem().invoke(this::blockingMethod)
.runSubscriptionOn(Infrastructure.getDefaultWorkerPool())
.invoke(() -> logger
.info("Log 4: Completed task1WithBlocking."))
.replaceWithVoid();
}
public Uni task2NonBlocking()
{
return Uni.createFrom().voidItem().invoke(
() -> logger.info("Log 5: Completed task2NonBlocking."));
}
public Uni task3NonBlockingDB()
{
return Uni.createFrom().voidItem().invoke(() -> logger.info(
"Log 6: Completed DB load using Reactive Hibernate Panache."));
}
private void blockingMethod()
{
try
{
Thread.sleep(2000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
logger.info("Log 3: Blocking method executed.");
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79391383/quarkus-with-mutiny-seeking-advice-on-running-blocking-code-and-context-thread[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия