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

在Quarkus/Kogito Serverless Workflow中设置MDC的方案咨询

Kogito Workflow响应式环境下MDC属性管理方案

1. 确保MDC在响应式环境中正确传递

首先在application.properties中开启Quarkus Vert.x的MDC适配,让MDC绑定到Vert.x上下文,线程切换时自动传递上下文信息:

quarkus.vertx.mdc=true

2. 优化SubscriberDecorator的txid处理

优先从消息元数据中获取上游传递的txid,无则生成唯一ID,避免同一上下文内重复生成:

@ApplicationScoped
public class ConsumedMessageDecorator implements SubscriberDecorator {

    @Override
    public int getPriority() {
        return 10;
    }

    @Override
    public Multi<? extends Message<?>> decorate(Multi<? extends Message<?>> toBeSubscribed, List<String> channelNames, boolean isConnector) {
        return toBeSubscribed.onItem().invoke(message -> {
            // 从消息元数据提取txid,无则生成
            String txid = message.getMetadata("txid", String.class)
                    .orElseGet(() -> UUID.randomUUID().toString());
            if (MDC.get("txid") == null) {
                MDC.put("txid", txid);
            }
        });
    }
}

3. 正确的MDC清理时机

由于同一工作流上下文会执行多步骤并自推消息,禁止在单个消息处理后立即清理MDC,否则后续步骤会丢失txid。推荐两种精准清理方式:

方式一:利用请求上下文生命周期

创建RequestScoped Bean,借助容器的生命周期钩子在请求/上下文结束时自动清理MDC:

@RequestScoped
public class MdcCleanupBean {

    @PreDestroy
    void cleanupMdc() {
        MDC.clear();
    }
}

在ConsumedMessageDecorator中注入该Bean即可,容器会自动管理其生命周期,无需手动调用:

@ApplicationScoped
public class ConsumedMessageDecorator implements SubscriberDecorator {

    @Inject
    MdcCleanupBean mdcCleanupBean;

    // 原有装饰逻辑...
}

方式二:监听工作流实例生命周期

通过Kogito的流程事件监听器,在工作流实例完成或终止时清理MDC,精准绑定工作流生命周期:

@ApplicationScoped
public class WorkflowInstanceListener implements ProcessEventListener {

    @Override
    public void afterProcessCompleted(ProcessCompletedEvent event) {
        MDC.remove("txid");
    }

    @Override
    public void afterProcessAborted(ProcessAbortedEvent event) {
        MDC.remove("txid");
    }
}

4. 关键注意事项

  • 异步分支场景下,开启quarkus.vertx.mdc=true后,Quarkus会自动在Vert.x上下文间传递MDC信息,无需额外处理。
  • 避免在工作流步骤中手动修改或清理MDC,保持统一的入口(SubscriberDecorator)和出口(生命周期钩子)管理,防止上下文混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:47:07