Quarkus с Hibernate Reactive и плохой производительностью Kafka

У нас есть приложение Quarkus, которое читает сообщения из темы Kafka, выполняет незначительные проверки процессов (но некоторые из них включают вызов базы данных) и записывает в другую тему. Мы используем императивный и синхронный подход и читаем, что для достижения большей производительности нам следует использовать функциональный и асинхронный код.

Но после рефакторинга и теперь использую Hibernate Reactive и Mutiny. Мы получили очень плохую производительность по сравнению с той, которая у нас уже есть.

Потребитель/Производитель

      @ApplicationScoped
public class TransactionsConsumer {
  private static final String ACKNOWLEDGE_RECEIVED = "Acknowledge received";
  @Inject
  TransactionService transactionService;

  Logger logger = LoggerFactory.getLogger(TransactionsConsumer.class);

  @Incoming("requestsPayments")
  @Outgoing("acks")
  public Uni<Message<ResponseVO>> savePaymentsReactive(Message<Transaction> transactionMessage) {
    transactionMessage.ack();

    return transactionService.processEvent(transactionMessage).onItem()
        .invoke(response -> logger.info(ACKNOWLEDGE_RECEIVED));
  }
}

Вот как мы пишем/читаем из БД:

          private Uni<Account> findAccountById(Long id) {
        return sessionFactory.withTransaction(session -> session.find(Account.class, id));
    }


    public Uni<Account> storeAccount(Account account) {
        return sessionFactory.withTransaction(session -> session.persist(account))
                .onItem().transform(ignored -> account);
    }

    public Uni<Account> updateAccount(Account account) {
        return sessionFactory.withTransaction(session -> session.merge(account))
                .onItem().transform(ignored -> account);
    }

Может ли кто-нибудь помочь? Мы много читали о хорошей производительности этого подхода, но получаем очень плохие результаты по сравнению с традиционным подходом.

Мы ожидали потрясающего выступления.

0 ответов

Другие вопросы по тегам