soul-wonder
@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/

分类:

技术点:

相关文章:

  • 2021-08-17
  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-28
猜你喜欢
  • 2021-12-08
  • 2021-05-21
  • 2021-12-18
  • 2021-04-24
  • 2021-07-06
  • 2021-07-29
  • 2022-12-23
相关资源
相似解决方案