From 0026391c7c9a28c5c02505df596fe11740ef188a Mon Sep 17 00:00:00 2001 From: pf5ub3a78 <1162620239@qq.com> Date: Sun, 2 Nov 2025 21:26:53 +0800 Subject: [PATCH] SOA2 --- ServiceBus.java | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 ServiceBus.java diff --git a/ServiceBus.java b/ServiceBus.java new file mode 100644 index 0000000..b9a1931 --- /dev/null +++ b/ServiceBus.java @@ -0,0 +1,79 @@ +package com.soa.bus; + +import com.soa.service.Service; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 服务总线 - 负责服务的注册、发现和路由 + */ +public class ServiceBus { + private static final Logger logger = LogManager.getLogger(ServiceBus.class); + private static ServiceBus instance; + private final Map serviceRegistry = new ConcurrentHashMap<>(); + + private ServiceBus() {} + + /** + * 获取服务总线单例 + */ + public static synchronized ServiceBus getInstance() { + if (instance == null) { + instance = new ServiceBus(); + } + return instance; + } + + /** + * 注册服务 + */ + public void registerService(Service service) { + String serviceName = service.getName(); + serviceRegistry.put(serviceName, service); + logger.info("Service registered: {}", serviceName); + } + + /** + * 注销服务 + */ + public void unregisterService(String serviceName) { + serviceRegistry.remove(serviceName); + logger.info("Service unregistered: {}", serviceName); + } + + /** + * 调用服务 + */ + public String callService(String serviceName, String request) { + Service service = serviceRegistry.get(serviceName); + if (service == null) { + logger.error("Service not found: {}", serviceName); + return "Error: Service not found - " + serviceName; + } + + if (!service.isAvailable()) { + logger.error("Service not available: {}", serviceName); + return "Error: Service not available - " + serviceName; + } + + logger.info("Routing request to service: {}", serviceName); + return service.execute(request); + } + + /** + * 检查服务是否可用 + */ + public boolean isServiceAvailable(String serviceName) { + Service service = serviceRegistry.get(serviceName); + return service != null && service.isAvailable(); + } + + /** + * 获取已注册的服务数量 + */ + public int getRegisteredServiceCount() { + return serviceRegistry.size(); + } +} \ No newline at end of file