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(); } }