pf5ub3a78 1 month ago
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…
Cancel
Save