From 4908f5449c791af95db44241093a15582c521165 Mon Sep 17 00:00:00 2001 From: pf5ub3a78 <1162620239@qq.com> Date: Sun, 2 Nov 2025 21:27:09 +0800 Subject: [PATCH] SOA2 --- ServiceGateway.java | 65 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 ServiceGateway.java diff --git a/ServiceGateway.java b/ServiceGateway.java new file mode 100644 index 0000000..a54c356 --- /dev/null +++ b/ServiceGateway.java @@ -0,0 +1,65 @@ +package com.soa.gateway; + +import com.soa.bus.ServiceBus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * 服务网关 - 负责请求的路由、认证、限流等 + */ +public class ServiceGateway { + private static final Logger logger = LogManager.getLogger(ServiceGateway.class); + private final ServiceBus serviceBus; + + public ServiceGateway() { + this.serviceBus = ServiceBus.getInstance(); + } + + /** + * 处理请求 + */ + public String handleRequest(String serviceName, String request, String apiKey) { + // 1. 验证API Key + if (!validateApiKey(apiKey)) { + logger.warn("Invalid API Key: {}", apiKey); + return "Error: Unauthorized access - Invalid API Key"; + } + + // 2. 日志请求 + logger.info("Request received for service: {}, with API Key ending in: {}", + serviceName, apiKey.substring(apiKey.length() - 4)); + + // 3. 检查限流(简单实现) + if (!checkRateLimit(apiKey)) { + logger.warn("Rate limit exceeded for API Key: {}", apiKey); + return "Error: Rate limit exceeded"; + } + + // 4. 路由到服务总线 + return serviceBus.callService(serviceName, request); + } + + /** + * 验证API Key + */ + private boolean validateApiKey(String apiKey) { + // 简化实现 - 实际应该从数据库或配置中验证 + return apiKey != null && apiKey.startsWith("valid_"); + } + + /** + * 检查限流 + */ + private boolean checkRateLimit(String apiKey) { + // 简化实现 - 实际应该使用令牌桶或漏桶算法 + return true; + } + + /** + * 获取服务状态 + */ + public String getServiceStatus(String serviceName) { + boolean available = serviceBus.isServiceAvailable(serviceName); + return "Service: " + serviceName + " - Status: " + (available ? "Available" : "Unavailable"); + } +} \ No newline at end of file