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.
相关产品推荐
相关产品推荐

