dubbo學習筆記 第十二章 dubbo-admin工程禁用/啓用按鈕失效問題

網上有人說dubbo-admin工程部署起來了,可是發現禁用一個提供者服務後,消費者仍然能夠調用提供者提供的服務,我試了一下,也確實碰到了一樣的狀況。我我的認爲是dubbo-admin對此按鈕的後端實現代碼寫得邏輯有問題形成的,後面我調整了一下就能夠了,具體調整以下:java

1,找到com.alibaba.dubbo.governance.service.impl.ProviderServiceImpl這個類,而後對啓用/禁用的代碼進行修改,修改以下:後端

禁用代碼ide

public void disableProvider(Long id) {
        if (id == null) {
            throw new IllegalStateException("no provider id");
        }

        Provider oldProvider = findProvider(id);
        if (oldProvider == null) {
            throw new IllegalStateException("Provider was changed!");
        }

        if (oldProvider.isDynamic()) {
        	 List<Override> oList = overrideService.findByServiceAndAddress(oldProvider.getService(), oldProvider.getAddress());

             for (Override o : oList) {
                 Map<String, String> params = StringUtils.parseQueryString(o.getParams());
                 if (params.containsKey(Constants.DISABLED_KEY)) {
                     if (params.get(Constants.DISABLED_KEY).equals("false")) {
                         overrideService.deleteOverride(o.getId());
                     }
                 }
             }
            //保證disable的override惟一
            if (oldProvider.isEnabled()) {
                Override override = new Override();
                override.setAddress(oldProvider.getAddress());
                override.setService(oldProvider.getService());
                override.setEnabled(false);
                
                override.setParams(Constants.DISABLED_KEY + "=true");
                overrideService.saveOverride(override);
                
                //本身修改的版本
                oldProvider.setEnabled(false);
                updateProvider(oldProvider);
                return;
            }
           
        } else {
            oldProvider.setEnabled(false);
            updateProvider(oldProvider);
        }

    }

啓用代碼code

public void enableProvider(Long id) {
        if (id == null) {
            throw new IllegalStateException("no provider id");
        }

        Provider oldProvider = findProvider(id);

        if (oldProvider == null) {
            throw new IllegalStateException("Provider was changed!");
        }
        if (oldProvider.isDynamic()) {
        	   List<Override> oList = overrideService.findByServiceAndAddress(oldProvider.getService(), oldProvider.getAddress());

               for (Override o : oList) {
                   Map<String, String> params = StringUtils.parseQueryString(o.getParams());
                   if (params.containsKey(Constants.DISABLED_KEY)) {
                       if (params.get(Constants.DISABLED_KEY).equals("true")) {
                           overrideService.deleteOverride(o.getId());
                       }
                   }
               }
            //保證disable的override惟一
            if (!oldProvider.isEnabled()) {
                Override override = new Override();
                override.setAddress(oldProvider.getAddress());
                override.setService(oldProvider.getService());
                override.setEnabled(true);
               
                override.setParams(Constants.DISABLED_KEY + "=false");
                overrideService.saveOverride(override);
                oldProvider.setEnabled(true);
                updateProvider(oldProvider);
                return;
            }
         
        } else {
            oldProvider.setEnabled(true);
            updateProvider(oldProvider);
        }
    }
相關文章
相關標籤/搜索