網上有人說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); } }