package mxdx1; import java.util.List; import java.util.Map; import java.util.Random; import java.util.concurrent.ConcurrentHashMap; public abstract class ServiceClient implements ServiceObserver { private ServiceRegistry registry; private Map> serviceCache; public ServiceClient() { this.registry = ServiceRegistry.getInstance(); this.serviceCache = new ConcurrentHashMap<>(); } // 订阅服务 public void subscribe(String serviceName) { registry.addObserver(serviceName, this); // 初始化缓存 serviceCache.put(serviceName, registry.discover(serviceName)); } // 调用服务(简化实现) public String invoke(String serviceName, String method, String param) { List services = serviceCache.get(serviceName); if (services == null || services.isEmpty()) { return "No available service: " + serviceName; } // 简单负载均衡:随机选择 ServiceInfo service = services.get(new Random().nextInt(services.size())); return "Invoke " + serviceName + " on " + service.getHost() + ":" + service.getPort() + " result: " + mockInvoke(service, method, param); } // 模拟远程调用 private String mockInvoke(ServiceInfo service, String method, String param) { // 实际项目中这里会通过网络调用服务 return "Mock result for " + method + "(" + param + ")"; } // 服务变更通知 @Override public void onServiceChanged(String serviceName, List serviceInfos) { System.out.println("Service " + serviceName + " changed, new list: " + serviceInfos); serviceCache.put(serviceName, serviceInfos); } }