springBoot動態(tài)獲取dubbo的register

前言

網(wǎng)上有很多SpringBoot與dubbo的配置,不過多是靜態(tài)寫死address地址的。如何動態(tài)從配置中心獲取address配置?本篇文章可能會幫到你

靜態(tài)address配置方式

靜態(tài)dubbo的配置方式有很多。比如application.properties的配置方式:

dubbo.registry.id=cms
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.222.107

這種方式也是網(wǎng)上文章最常見的配置方式。
如果address地址是動態(tài)從配置中心獲取呢?

動態(tài)address配置方式

1. 從配置中心拉去配置

@Configuration
@Slf4j
public class CCmsRegister {
    public CCmsRegister(){
        log.info("-----------ccmsRegister");
        CcmsIndependent.add(this);
    }

    @CcmsMapper(group="dubbo-conf",name="cms.zk")
    public static String cms;

上面代碼是我自己公司項目獲取動態(tài)配置的方式。 你們可以根據(jù)自己的具體情況調(diào)整從配置中心獲取配置的方式。

@CcmsMapper是我公司自己的注解,目的是從配置中心拉取對應(yīng)的配置。

請根據(jù)自己的情況把該類調(diào)整成自己獲取配置中心配置的代碼。 但是要保證有成員變量,注意成員變量的名字,后面會根據(jù)變量名來注冊對應(yīng)id的dubbo-register。(是不是靜態(tài)都無所謂)

2.根據(jù)拉取的配置動態(tài)加載dubbo-register

@Configuration
public class DubboConfig {
    @Autowired
    private CCmsRegister cCmsRegister;

    public DubboConfig(){
        registryConfig();
    }
    public void registryConfig() {
        Field[] fields = CCmsRegister.class.getFields();
        List<RegistryConfig> list = new ArrayList<>();
        try {
            for(Field field: fields){
                RegistryConfig registryConfig = new RegistryConfig((String)field.get(cCmsRegister),"zookeeper");
                registryConfig.setId(field.getName());
                list.add(registryConfig);
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        ConfigManager.getInstance().addRegistries(list);
    }
}

上面代碼的目的是:
1. 反射出配置類的成員變量信息
2. 循環(huán)配置類的成員變量,生成對應(yīng)的RegistryConfig,Id為成員變量名。
3. 將生成的RegistryConfig集合注冊。

用bean的方式動態(tài)注冊register

@Configuration
public class DubboConfig {
    @Bean(name = "cms")
    public RegistryConfig registryConfig() {
        RegistryConfig reg = new RegistryConfig(CCmsRegister.cms,"zookeeper");
        return reg;
    }
}

這種是使用bean的方式注冊,不過缺點很明顯。如果你的應(yīng)用要注冊多個dubbo-register,就要寫多個類似的bean。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容