Dubbo使用Apollo作爲配置中心實戰

一.Dubbo支持Apollo的介紹

Apollo是攜程開源的一款配置中心,能夠集中化管理應用不同環境、不同集羣的配置,配置修改後能夠實時推送到應用端,並且具備規範的權限、流程治理等特性,適用於微服務配置管理場景。

Dubbo目前的最新版本2.7.0將過去單一的註冊中心拆分成了註冊中心、元數據中心和配置中心。其中配置中心起到的作用之一,就是將配置外部化,也就是將配置從應用內部剝離出去,可以在一個地方統一管理配置,也可以在程序啓動之後從配置中心修改配置,再動態刷新到應用(前提是應用自身支持在啓動之後切換該配置)。

目前Dubbo已經支持Zookeeper、Nacos、Apollo作爲配置中心。本文就將介紹將Apollo作爲配置中心的使用方式。

二.Apollo的安裝與使用。

本部分不贅述,請參考官方文檔:https://github.com/ctripcorp/apollo/wiki/Apollo%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

三.Apollo配置Dubbo屬性:

打開本地安裝的Apollo首頁並登陸:

新建一個應用dubbo-demo-provider,

新建一個namespace,名爲dubbo,目前dubbo默認支持的命名空間爲dubbo。

注意不要勾選部門前綴,同時設置爲public。當設置爲private時,只有相同的app.id的應用纔可以獲取此配置。而public可以被所有應用獲取。

添加兩條配置:

添加屬性之後,點擊“發佈”。

四.Dubbo應用搭建

1.下載Dubbo 2.7.0的源碼。Dubbo源碼中自帶了一個demo模塊,可以直接運行。本文就通過修改它的配置,來使用Apollo配置中心。

2.打開dubbo-demo-xml-provider模塊下的dubbo-provider.xml配置文件,註釋掉

<dubbo:registry address="multicast://224.5.6.7:1234" />

添加下面的配置:

<dubbo:config-center app-name="dubbo-demo-provider" protocol="apollo" address="127.0.0.1:8080"/>

3.打開dubbo-demo-xml-consumer作同樣的配置。

4.demo代碼講解:

首先是定義了一個接口:

public interface DemoService {

    String sayHello(String name);

}

在provider端實現這一接口:

public class DemoServiceImpl implements DemoService {
    private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);

    @Override
    public String sayHello(String name) {
        logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();
    }

}

服務端啓動類:

public class Application {
    /**
     * In order to make sure multicast registry works, need to specify '-Djava.net.preferIPv4Stack=true' before
     * launch the application
     */
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-provider.xml");
        context.start();
        System.in.read();
    }
}

消費者啓動類:

public class Application {
    /**
     * In order to make sure multicast registry works, need to specify '-Djava.net.preferIPv4Stack=true' before
     * launch the application
     */
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-consumer.xml");
        context.start();
        DemoService demoService = context.getBean("demoService", DemoService.class);
        String hello = demoService.sayHello("world");
        System.out.println("result: " + hello);
    }
}

五.下載zookeeper並啓動

因爲demo中需要使用zookeeper作爲註冊中心,所以需下載zookeeper並啓動。具體方式請自行搜索。

六.啓動應用

首先啓動provider,輸出日誌:

可以看到,因爲沒有設置app.id,所以只能讀取public的配置

再啓動consumer,啓動日誌:

說明consumer調用provider成功

七.總結

Dubbo目前對支持Apollo作爲配置中心做了一個初步的實現,目前所有的配置都是放到一個key下面(即value的一行是一個dubbo自身的配置)dubbo拿到這個配置後,自己解析爲自身的多個配置。後續可能會修改爲支持apollo上有多個key。

通過引入配置中心,可以在應用中減少配置,將配置放到配置中心統一管理。並且配置中心可以在不重啓應用的情況下修改配置並推送給應用。當然前提是應用的配置本身支持在啓動後改變並生效(某些配置可能在啓動時生效,但啓動後不能修改)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章