Как выполнить неблокирующее обновление базы данных «огнестрельное и самолет» вместе с основной транзакцией в Quarkus?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как выполнить неблокирующее обновление базы данных «огнестрельное и самолет» вместе с основной транзакцией в Quarkus?

Сообщение Anonymous »

Я работаю над проектом Quarkus, используя мятеж и гибернат реактивную панат. В одной из моих конечных точек API мне нужно выполнить три параллельные операции базы данных: один запрос и два обновления.

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

doSelect1
) и одно из обновлений базы данных (

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

doUpdate1
) должен выполняться вместе. Оба должны быть успешными, чтобы транзакция считалась успешной.
[*] немедленный ответ: После успешного завершения doselect1 и doupdate1 , API должен немедленно вернуть результат Doselect1 к клиенту. Обновление базы данных (

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

doUpdate2
) должен быть инициирован. Эта операция должна быть «Огненной и установленной». doupdate1 ) откатить или повлиять на ответ API.



Вот моя текущая реализация с использованием uni.combine () :
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.tuples.Tuple3;
import io.quarkus.hibernate.reactive.panache.common.WithTransaction;
import jakarta.transaction.Transactional;

// ...

@WithTransaction
public Uni doLogin() {
// I want doSelect1() and doUpdate1() to succeed together,
// and for the method to return as soon as they are done.
// doUpdate2() should run in the background without blocking the response.
return Uni.combine().all().unis(doSelect1(), doUpdate1(), doUpdate2().onFailure().recoverWithNull())
.asTuple()
.onItem().transform(tuple -> tuple.getItem1()); // Return the result of doSelect1
}

public Uni doSelect1() {
// ... database query logic
}

public Uni doUpdate1() {
// ... database update logic
}

// This should be a non-blocking, "fire-and-forget" operation
// in a new transaction.
@WithTransaction
@Transactional(Transactional.TxType.REQUIRES_NEW) // Start a new transaction
public Uni doUpdate2() {
// ... another database update logic that might fail
// and should not affect the main flow.
}

Проблема:
Мой текущий код почти работает. OnFailure (). Recoverwithnull () на doupdate2 () правильно предотвращает его сбой, чтобы весь трубопровод не сработал. Тем не менее, uni.combine (). All () часть все еще ждет всех трех Uni s, прежде чем продолжить. Это означает, что ответ API заблокирован до тех пор, пока не Doupdate2 , который нарушает мое требование «огне-самого и жесткого».
Мой вопрос:
Как я могу правильно реализовать это не блокирующее поведение и код/код> и код. Вместе в транзакции? Это рекомендуемый подход здесь, или есть более простой способ достичь этого, используя только мятеж? Например, есть ли способ подписаться на DoupDate2 , не имея его в рамках операции Blocking Combine ? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/797 ... ide-a-main
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как выполнить неблокирующее обновление базы данных «огнестрельное и самолет» вместе с основной транзакцией в Quarkus?
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Рекомендации, которым следует следовать при создании приложения электронной коммерции, продающего огнестрельное оружие и
    Anonymous » » в форуме IOS
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Неблокирующее соединение в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Почему самолет не отображается на графике matplotlib
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Почему самолет не отображается на графике matplotlib
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

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