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);
}
Может ли кто-нибудь помочь? Мы много читали о хорошей производительности этого подхода, но получаем очень плохие результаты по сравнению с традиционным подходом.
Мы ожидали потрясающего выступления.