其實這個博客應該是和上面的2個博客連貫起來的。
仔細想想,初始化->註冊中心->服務調用。是不是嘛
我直接說重點了哈。
服務提供者啓動的時候,中間會經歷很多過程,但是最終會走到這個類的特定方法:
RegistryProtocol.export()
/** * RegistryProtocol * * 註冊中心協議實現類。 */ public class RegistryProtocol implements Protocol { public void register(URL registryUrl, URL registedProviderUrl) { // 看到這個類有木有很熟悉的感覺呢?你懂我的意思把,第一篇博客裏面截了圖的,將服務註冊到註冊中心 Registry registry = registryFactory.getRegistry(registryUrl); registry.register(registedProviderUrl); } @Override public <T> Exporter<T> export(final Invoker<T> originInvoker) throws RpcException { // 暴露服務 // export invoker final ExporterChangeableWrapper<T> exporter = doLocalExport(originInvoker); // 獲得註冊中心 URL URL registryUrl = getRegistryUrl(originInvoker); // 獲得註冊中心對象 // registry provider final Registry registry = getRegistry(originInvoker); // 獲得服務提供者 URL final URL registedProviderUrl = getRegistedProviderUrl(originInvoker); //to judge to delay publish whether or not boolean register = registedProviderUrl.getParameter("register", true); // 向註冊中心訂閱服務消費者 ProviderConsumerRegTable.registerProvider(originInvoker, registryUrl, registedProviderUrl); // 向註冊中心註冊服務提供者(自己) if (register) { register(registryUrl, registedProviderUrl); ProviderConsumerRegTable.getProviderWrapper(originInvoker).setReg(true); // // 標記向本地註冊表的註冊服務提供者,已經註冊 } // 使用 OverrideListener 對象,訂閱配置規則 // Subscribe the override data // FIXME When the provider subscribes, it will affect the scene : a certain JVM exposes the service and call the same service. Because the subscribed is cached key with the name of the service, it causes the subscription information to cover. // 創建訂閱配置規則的 URL final URL overrideSubscribeUrl = getSubscribedOverrideUrl(registedProviderUrl); // 創建 OverrideListener 對象,並添加到 `overrideListeners` 中 final OverrideListener overrideSubscribeListener = new OverrideListener(overrideSubscribeUrl, originInvoker); overrideListeners.put(overrideSubscribeUrl, overrideSubscribeListener); // 向註冊中心,發起訂閱 registry.subscribe(overrideSubscribeUrl, overrideSubscribeListener); //Ensure that a new exporter instance is returned every time export return new DestroyableExporter<T>(exporter, originInvoker, overrideSubscribeUrl, registedProviderUrl); } }