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

Spring Boot下Apache Camel Saga集成LRA协调器配置咨询

Spring Boot + Apache Camel Saga 集成 LRA 协调器配置指南

一、启动外部LRA协调器

直接使用官方镜像运行LRA协调器,执行以下命令:

docker run -d -p 8080:8080 quay.io/quarkus/lra-coordinator:latest

验证启动状态:访问 http://localhost:8080/lra-coordinator/health/live,返回UP即表示协调器正常运行。

二、Spring Boot项目依赖配置

在Maven的pom.xml中添加必要依赖:

<dependencies>
    <!-- Spring Boot基础依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Apache Camel Spring Boot Starter -->
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
        <version>3.20.2</version> <!-- 版本需与Camel LRA组件保持一致 -->
    </dependency>
    <!-- Camel LRA Saga 核心组件 -->
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-lra-starter</artifactId>
        <version>3.20.2</version>
    </dependency>
</dependencies>

三、配置LRA协调器连接信息

在application.properties中添加LRA相关配置:

# LRA协调器访问地址
camel.lra.coordinator-url=http://localhost:8080/lra-coordinator
# Saga事务超时时间(单位:毫秒)
camel.lra.timeout=30000
# Camel实例名称(可选)
camel.springboot.name=CamelLRASagaDemo

四、示例Saga路由实现

创建包含业务执行与补偿逻辑的Camel路由:

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.lra.LRAConstants;
import org.springframework.stereotype.Component;

@Component
public class LRASagaRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        // Saga事务入口:启动LRA并执行业务流程
        from("rest:get:/start-saga")
                .routeId("start-lra-saga")
                // 启动LRA事务,指定补偿路由ID
                .to("lra:start?compensationRouteId=compensate-order")
                // 执行业务步骤1:创建订单
                .to("direct:create-order")
                // 执行业务步骤2:扣减库存(模拟异常触发补偿)
                .to("direct:deduct-stock")
                // 正常完成LRA事务
                .to("lra:complete")
                .setBody(constant("Saga执行成功"));

        // 创建订单业务逻辑
        from("direct:create-order")
                .routeId("create-order")
                .log("创建订单,订单ID:${random(1000,9999)}")
                .delay(1000);

        // 扣减库存业务逻辑(模拟异常)
        from("direct:deduct-stock")
                .routeId("deduct-stock")
                .log("扣减库存")
                .throwException(new RuntimeException("库存扣减失败,触发补偿"));

        // 补偿逻辑:撤销已创建的订单
        from("direct:compensate-order")
                .routeId("compensate-order")
                .log("执行补偿操作:撤销已创建的订单")
                .setHeader(LRAConstants.LRA_COMPENSATION_STATUS, constant("COMPENSATED"));
    }
}

五、关键注意事项

  • 当业务步骤抛出异常时,LRA协调器会自动触发指定的补偿路由;也可通过lra:cancel手动触发Saga取消。
  • 可通过http://localhost:8080/lra-coordinator/lras查看当前所有LRA事务的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:13:16