1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public SubscribeServiceResponse handle(SubscribeServiceRequest request, RequestMeta meta) throws NacosException { String namespaceId = request.getNamespace(); String serviceName = request.getServiceName(); String groupName = request.getGroupName(); String app = request.getHeader("app", "unknown"); String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName); Service service = Service.newService(namespaceId, groupName, serviceName, true); Subscriber subscriber = new Subscriber(meta.getClientIp(), meta.getClientVersion(), app, meta.getClientIp(), namespaceId, groupedServiceName, 0, request.getClusters()); ServiceInfo serviceInfo = ServiceUtil.selectInstancesWithHealthyProtection(serviceStorage.getData(service), metadataManager.getServiceMetadata(service).orElse(null), subscriber.getCluster(), false, true, subscriber.getIp());//做了按照cluster过滤。并且还存在防止服务实例过少,被调用方打爆的保护措施 if (request.isSubscribe()) { clientOperationService.subscribeService(service, subscriber, meta.getConnectionId()); //继续往下看 NotifyCenter.publishEvent(new SubscribeServiceTraceEvent(System.currentTimeMillis(), meta.getClientIp(), service.getNamespace(), service.getGroup(), service.getName())); } else { clientOperationService.unsubscribeService(service, subscriber, meta.getConnectionId()); NotifyCenter.publishEvent(new UnsubscribeServiceTraceEvent(System.currentTimeMillis(), meta.getClientIp(), service.getNamespace(), service.getGroup(), service.getName())); } return new SubscribeServiceResponse(ResponseCode.SUCCESS.getCode(), "success", serviceInfo); }
|