dubbo学习笔记 第十二章 dubbo-admin工程禁用/启用按钮失效问题

网上有人说dubbo-admin工程部署起来了,但是发现禁用一个提供者服务后,消费者仍然可以调用提供者提供的服务,我试了一下,也确实碰到了同样的情况。我个人认为是dubbo-admin对此按钮的后端实现代码写得逻辑有问题造成的,后面我调整了一下就可以了,具体调整如下:

1,找到com.alibaba.dubbo.governance.service.impl.ProviderServiceImpl这个类,然后对启用/禁用的代码进行修改,修改如下:

禁用代码

 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);
        }

    }

启用代码

 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);
        }
    }

 

转载于:https://my.oschina.net/u/3702/blog/1572253

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将Nacos与Dubbo-Admin集成之前,需要先确保已经完成了以下步骤: 1. 安装和启动Nacos服务; 2. 部署和启动Dubbo-Admin服务; 3. 在Dubbo-Admin服务中配置Dubbo的注册中心为Nacos。 下面是详细的搭建步骤: 1. 在Nacos中创建一个命名空间,并且在该命名空间下创建一个服务。例如,命名空间为dubbo服务名称为dubbo-demo。 2. 在Dubbo-Admin服务中打开dubbo.properties文件,在文件中添加以下配置: ``` dubbo.registry.address=nacos://<Nacos服务器地址>:<Nacos服务器端口> dubbo.metadata-report.address=nacos://<Nacos服务器地址>:<Nacos服务器端口> ``` 其中,<Nacos服务器地址>和<Nacos服务器端口>分别为Nacos服务器的地址和端口号。 3. 在Dubbo-Admin服务中启动Dubbo-Admin应用程序。在浏览器中打开Dubbo-Admin的管理界面,并且在左侧的导航栏中选择服务管理。 4. 在服务管理页面中,选择dubbo-demo服务,并且在服务详情页面中,单击“编辑”按钮。在编辑页面中,配置服务的元数据,然后单击“保存”按钮。 5. 在服务详情页面中,单击“订阅”按钮,以便Dubbo-Admin能够自动发现和管理该服务。 6. 在Dubbo-Admin的管理界面中,选择服务监控。在服务监控页面中,可以查看dubbo-demo服务的状态和性能指标。 到此为止,Nacos和Dubbo-Admin的集成就已经完成了。通过Dubbo-Admin的管理界面,可以方便地对Dubbo服务进行监控、管理和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值