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

使用Quarkus Hibernate Reactive Panache写库时随机出现Vertx上下文缺失错误

问题分析

随机抛出No current Vertx context found异常的核心原因是:Reactive Messaging的WebSocket消息处理线程有时不在Vert.x Context中执行,而Hibernate Reactive(包括@WithSession/@WithTransaction注解)依赖Vert.x Context来绑定会话和事务上下文,脱离该上下文就会触发这个异常。

解决方案

你可以通过以下两种方式,确保消息处理逻辑始终在Vert.x Context中执行:

方式1:使用@RunOnVertxContext注解

直接给消费者方法添加io.quarkus.vertx.RunOnVertxContext注解,强制方法在Vert.x上下文中运行:

@Inject
Mutiny.SessionFactory sf;

@RunOnVertxContext
@WithSession
@Incoming("collector")
Uni<Void> collect(final String text) {
    Mss msg = new Mss(text);
    return sf.withTransaction(session -> msg.persistAndFlush()).replaceWithVoid();
}

方式2:手动绑定到Vert.x执行器

如果注解方式不生效,可通过Mutiny的runSubscriptionOn方法,将Uni的执行绑定到Vert.x事件循环上下文:

@Inject
Vertx vertx;
@Inject
Mutiny.SessionFactory sf;

@WithSession
@Incoming("collector")
Uni<Void> collect(final String text) {
    Mss msg = new Mss(text);
    return sf.withTransaction(session -> msg.persistAndFlush())
            .replaceWithVoid()
            .runSubscriptionOn(vertx.getOrCreateContext().executor());
}
额外注意事项
  • 检查quarkiverse.reactivemessaging.http的配置,避免将WebSocket消费者配置到非Vert.x线程池执行;
  • 该问题是上下文绑定问题,和Quarkus版本无关,无需切换版本;
  • 空逻辑方法也报错,进一步验证了异常是上下文缺失导致,而非数据库操作本身的问题。

内容的提问来源于stack exchange,提问作者alick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:22:49