十、springcloud之Consul注销实例

@Autowired  //com.ecwid.consul.v1.ConsulClient
    private ConsulClient consulClient;

    @PostMapping("/clear/{serviceId}")
    public void clear(@PathVariable String serviceId) {
        consulClient.agentServiceDeregister(serviceId);
    }
  • 先通过consulClient.getHealthServices(serviceId, false, null)根据serviceId来获取服务实例清单
  • 遍历实例清单中有不是PASSING状态的实例,就调用client.agentServiceDeregister(serviceId)来剔除
    public void clear(@PathVariable String id) {
            List<HealthService> response = consulClient.getHealthServices(id, false, null).getValue();
            for(HealthService service : response) {
                // 创建一个用来剔除无效实例的ConsulClient,连接到无效实例注册的agent
                ConsulClient clearClient = new ConsulClient(service.getNode().getAddress(), 8500);
                service.getChecks().forEach(check -> {
                    if(check.getStatus() != Check.CheckStatus.PASSING) {
                        logger.info("unregister : {}", check.getServiceId());
                        clearClient.agentServiceDeregister(check.getServiceId());
                    }
                });
            }
        }

    client连接的agent必须是serviceId注册的agent

参考:http://blog.didispace.com/consul-deregister/

posted @ 2018-07-02 15:52  灬小乙  阅读(658)  评论(0编辑  收藏  举报