package mxdx2; //服务总线接口(中介者模式) public interface ServiceBus { // 注册服务 void registerService(String serviceName, ServiceEndpoint endpoint); // 路由请求 Object routeRequest(String serviceName, String method, Object... params); // 注册监控器 void registerMonitor(ServiceMonitor monitor); } //服务总线实现 public class EnterpriseServiceBus implements ServiceBus { // 服务注册表:服务名 -> 服务端点 private Map serviceRegistry = new ConcurrentHashMap<>(); // 监控器列表 private List monitors = new CopyOnWriteArrayList<>(); @Override public void registerService(String serviceName, ServiceEndpoint endpoint) { serviceRegistry.put(serviceName, endpoint); notifyMonitor("REGISTER", serviceName, "Service registered"); } @Override public Object routeRequest(String serviceName, String method, Object... params) { ServiceEndpoint endpoint = serviceRegistry.get(serviceName); if (endpoint == null) { notifyMonitor("ERROR", serviceName, "Service not found"); throw new ServiceNotFoundException("Service " + serviceName + " not found"); } try { long startTime = System.currentTimeMillis(); Object result = endpoint.invoke(method, params); long cost = System.currentTimeMillis() - startTime; notifyMonitor("INVOKE", serviceName, "Success, cost=" + cost + "ms"); return result; } catch (Exception e) { notifyMonitor("ERROR", serviceName, "Invocation failed: " + e.getMessage()); throw new ServiceInvocationException(e); } } @Override public void registerMonitor(ServiceMonitor monitor) { monitors.add(monitor); } // 通知监控器 private void notifyMonitor(String type, String serviceName, String message) { ServiceEvent event = new ServiceEvent(type, serviceName, message, System.currentTimeMillis()); for (ServiceMonitor monitor : monitors) { monitor.onEvent(event); } } }