监听元数据事件
NamingMetadataManager
@Overridepublic void onEvent(Event event) {//实例元数据if (event instanceof MetadataEvent.InstanceMetadataEvent) {handleInstanceMetadataEvent((MetadataEvent.InstanceMetadataEvent) event);//服务元数据 } else if (event instanceof MetadataEvent.ServiceMetadataEvent) {handleServiceMetadataEvent((MetadataEvent.ServiceMetadataEvent) event);} else {//服务端断开事件handleClientDisconnectEvent((ClientEvent.ClientDisconnectEvent) event);}}
实例元数据事件处理
private void handleInstanceMetadataEvent(MetadataEvent.InstanceMetadataEvent event) {//获取服务信息Service service = event.getService();//获取metadataId String metadataId = event.getMetadataId();// 如果包含实例的元数据if (containInstanceMetadata(service, metadataId)) {updateExpiredInfo(event.isExpired(),ExpiredMetadataInfo.newExpiredInstanceMetadata(event.getService(), event.getMetadataId()));}}
判断是否包含元数据
public boolean containInstanceMetadata(Service service, String metadataId) {return instanceMetadataMap.containsKey(service) && instanceMetadataMap.get(service).containsKey(metadataId);}
操作元数据信息
private final Set<ExpiredMetadataInfo> expiredMetadataInfos;private void updateExpiredInfo(boolean expired, ExpiredMetadataInfo expiredMetadataInfo) {// 添加或移除过期的实例元数据if (expired) {expiredMetadataInfos.add(expiredMetadataInfo);} else {expiredMetadataInfos.remove(expiredMetadataInfo);}}