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

