dubbo初始化簡易流程

其實這個博客應該是和上面的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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章