序
本文主要研究一下dubbo的MetadataReportService
MetadataReportService
dubbo-2.7.2/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/integration/MetadataReportService.java
public class MetadataReportService {
protected final Logger logger = LoggerFactory.getLogger(getClass());
private static volatile MetadataReportService metadataReportService;
private static Object lock = new Object();
private MetadataReportFactory metadataReportFactory = ExtensionLoader.getExtensionLoader(MetadataReportFactory.class).getAdaptiveExtension();
MetadataReport metadataReport;
URL metadataReportUrl;
MetadataReportService(URL metadataReportURL) {
if (METADATA_REPORT_KEY.equals(metadataReportURL.getProtocol())) {
String protocol = metadataReportURL.getParameter(METADATA_REPORT_KEY, DEFAULT_DIRECTORY);
metadataReportURL = URLBuilder.from(metadataReportURL)
.setProtocol(protocol)
.removeParameter(METADATA_REPORT_KEY)
.build();
}
this.metadataReportUrl = metadataReportURL;
metadataReport = metadataReportFactory.getMetadataReport(this.metadataReportUrl);
}
public static MetadataReportService instance(Supplier<URL> metadataReportUrl) {
if (metadataReportService == null) {
synchronized (lock) {
if (metadataReportService == null) {
URL metadataReportURLTmp = metadataReportUrl.get();
if (metadataReportURLTmp == null) {
return null;
}
metadataReportService = new MetadataReportService(metadataReportURLTmp);
}
}
}
return metadataReportService;
}
public void publishProvider(URL providerUrl) throws RpcException {
//f