parent
23671e12d8
commit
89b2b20c0f
@ -0,0 +1,101 @@
|
||||
package com.soa.orchestration;
|
||||
|
||||
import com.soa.bus.ServiceBus;
|
||||
import com.soa.monitoring.ServiceMonitor;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 服务编排器 - 负责组合多个服务来完成复杂的业务流程
|
||||
*/
|
||||
public class ServiceOrchestrator {
|
||||
private static final Logger logger = LogManager.getLogger(ServiceOrchestrator.class);
|
||||
private final ServiceBus serviceBus;
|
||||
private final ServiceMonitor monitor;
|
||||
|
||||
public ServiceOrchestrator() {
|
||||
this.serviceBus = ServiceBus.getInstance();
|
||||
this.monitor = ServiceMonitor.getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行订单处理流程
|
||||
* 1. 检查用户
|
||||
* 2. 创建订单
|
||||
* 3. 处理支付
|
||||
*/
|
||||
public String processOrder(String userId, String orderInfo, String paymentDetails) {
|
||||
logger.info("Starting order processing flow for user: {}", userId);
|
||||
|
||||
List<ProcessStep> steps = new ArrayList<>();
|
||||
steps.add(new ProcessStep("userService", "checkUser:" + userId));
|
||||
steps.add(new ProcessStep("orderService", "createOrder:" + orderInfo));
|
||||
steps.add(new ProcessStep("paymentService", "processPayment:" + paymentDetails));
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
boolean allSuccessful = true;
|
||||
|
||||
for (ProcessStep step : steps) {
|
||||
try {
|
||||
long startTime = monitor.startMonitoring(step.serviceName);
|
||||
String stepResult = serviceBus.callService(step.serviceName, step.request);
|
||||
|
||||
// 检查执行结果是否成功
|
||||
boolean success = !stepResult.contains("Error");
|
||||
monitor.endMonitoring(step.serviceName, startTime, success);
|
||||
|
||||
result.append(step.serviceName).append(": ").append(stepResult).append("\n");
|
||||
|
||||
if (!success) {
|
||||
allSuccessful = false;
|
||||
logger.error("Step failed: {}", step.serviceName);
|
||||
break; // 失败时中断流程
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
monitor.endMonitoring(step.serviceName, System.currentTimeMillis(), false);
|
||||
result.append(step.serviceName).append(": Error - ").append(e.getMessage()).append("\n");
|
||||
allSuccessful = false;
|
||||
logger.error("Exception in step {}: {}", step.serviceName, e.getMessage());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (allSuccessful) {
|
||||
result.append("Order processing completed successfully");
|
||||
} else {
|
||||
result.append("Order processing failed");
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建自定义流程
|
||||
*/
|
||||
public String executeCustomFlow(List<ProcessStep> steps) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
for (ProcessStep step : steps) {
|
||||
String stepResult = serviceBus.callService(step.serviceName, step.request);
|
||||
result.append(step.serviceName).append(": ").append(stepResult).append("\n");
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 流程步骤内部类
|
||||
*/
|
||||
public static class ProcessStep {
|
||||
public final String serviceName;
|
||||
public final String request;
|
||||
|
||||
public ProcessStep(String serviceName, String request) {
|
||||
this.serviceName = serviceName;
|
||||
this.request = request;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue