You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus事件处理器中Hibernate Reactive事务未执行问题排查

Hibernate Reactive with Panache事件处理器事务未执行排查

我在使用Hibernate Reactive with Panache开发时,编写了如下事件处理器:

@ConsumeEvent(value = "save-result")
@ReactiveTransactional
public Uni<ResultEntity> saveResult(ResultMessage msg) {
  ResultEntity result= msg.getResultEntity();
  result.setComplete(true);
  LOGGER.log(Level.INFO, "======> About to save Result: {0}", result);

  return resultRepository.persistAndFlush(result)
      .onItem().invoke(() -> LOGGER.log(Level.INFO,
          "Result has been saved"));
}

目前遇到的问题是:事件已被正常消费(日志======> About to save Result: {0}已打印),但实体未被保存,且Result has been saved日志也从未输出,仿佛事务根本没执行。

我当前使用Quarkus 2.16.7版本,之前尝试2.12.x版本也存在同样问题。另外需要说明的是,我还有一个ApplicationScoped Bean,里面有类似的持久化操作(逻辑更复杂)却能正常执行。


更新测试结果

为了验证Uni是否被订阅,我修改了代码并新增了一条日志:

@ConsumeEvent(value = "save-result")
@ReactiveTransactional
public Uni<ResultEntity> saveResult(ResultMessage msg) {
  ResultEntity result= msg.getResultEntity();
  result.setComplete(true);
  LOGGER.log(Level.INFO, "======> About to save Result: {0}", result);

  return Uni.createFrom().voidItem().onItem()
      .invoke(() -> LOGGER.log(Level.INFO,"----> in flow"))
      .onItem().transformToUni(unused -> resultRepository.persistAndFlush(result)
      .onItem().invoke(() -> LOGGER.log(Level.INFO,
          "Result has been saved")));
}

测试后发现----> in flow日志正常输出,说明Uni确实被订阅了,但实体仍然没有被持久化,Result has been saved日志依旧没有打印。

我怀疑这可能和Quarkus中Reactive事务与事件消费结合的已知问题类似,但暂时无法确认。

内容的提问来源于stack exchange,提问作者S. D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:52:21