parent
26fb1c1e76
commit
48767fa58d
@ -0,0 +1,74 @@
|
||||
package mxdx1;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
//服务注册中心(单例模式)
|
||||
public class ServiceRegistry {
|
||||
// 单例实例
|
||||
private static ServiceRegistry instance;
|
||||
|
||||
// 服务存储:服务名 -> 服务列表
|
||||
private Map<String, List<ServiceInfo>> serviceMap;
|
||||
// 观察者列表:服务名 -> 观察者列表
|
||||
private Map<String, List<ServiceObserver>> observers;
|
||||
|
||||
// 私有构造函数
|
||||
private ServiceRegistry() {
|
||||
serviceMap = new ConcurrentHashMap<>();
|
||||
observers = new ConcurrentHashMap<>();
|
||||
}
|
||||
|
||||
// 获取单例实例
|
||||
public static synchronized ServiceRegistry getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new ServiceRegistry();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
// 注册服务
|
||||
public void register(ServiceInfo serviceInfo) {
|
||||
String serviceName = serviceInfo.getServiceName();
|
||||
serviceMap.computeIfAbsent(serviceName, k -> new CopyOnWriteArrayList<>())
|
||||
.add(serviceInfo);
|
||||
// 通知观察者
|
||||
notifyObservers(serviceName);
|
||||
}
|
||||
|
||||
// 注销服务
|
||||
public void unregister(ServiceInfo serviceInfo) {
|
||||
String serviceName = serviceInfo.getServiceName();
|
||||
List<ServiceInfo> services = serviceMap.get(serviceName);
|
||||
if (services != null) {
|
||||
services.remove(serviceInfo);
|
||||
// 通知观察者
|
||||
notifyObservers(serviceName);
|
||||
}
|
||||
}
|
||||
|
||||
// 发现服务
|
||||
public List<ServiceInfo> discover(String serviceName) {
|
||||
return serviceMap.getOrDefault(serviceName, new ArrayList<>());
|
||||
}
|
||||
|
||||
// 注册观察者
|
||||
public void addObserver(String serviceName, ServiceObserver observer) {
|
||||
observers.computeIfAbsent(serviceName, k -> new CopyOnWriteArrayList<>())
|
||||
.add(observer);
|
||||
}
|
||||
|
||||
// 通知观察者
|
||||
private void notifyObservers(String serviceName) {
|
||||
List<ServiceObserver> obs = observers.get(serviceName);
|
||||
if (obs != null) {
|
||||
List<ServiceInfo> services = discover(serviceName);
|
||||
for (ServiceObserver observer : obs) {
|
||||
observer.onServiceChanged(serviceName, services);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue