/**
* consul服务重新注册
* @author xxm
* @date 2020/4/30
* @since 1.8
*/
@Slf4j
public class ConsulRetryRegistry implements CommandLineRunner {
private ConsulAutoRegistration consulAutoRegistration;
private ConsulServiceRegistry consulServiceRegistry;
private DiscoveryClient discoveryClient;
private ConsulRetryProperties properties;
public ConsulRetryRegistry(
ConsulAutoRegistration consulAutoRegistration,
ConsulServiceRegistry consulServiceRegistry,
DiscoveryClient discoveryClient,
ConsulRetryProperties properties
) {
this.consulAutoRegistration = consulAutoRegistration;
this.consulServiceRegistry = consulServiceRegistry;
this.discoveryClient = discoveryClient;
this.properties = properties;
}
@Override
public void run(String... args) {
// 获取当前服务
final NewService service = this.consulAutoRegistration.getService();
// 启动一个线程进行服务监测
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,new BasicThreadFactory.Builder().daemon(true).build());
executorService.scheduleAtFixedRate(() -> {
// 健康检查
if (!checkStatus(service)) {
try {
//重新注册
registry();
}catch (Exception e) {
log.error(e.getMessage());
}
}
}, 0, this.properties.getInitialInterval(), TimeUnit.MILLISECONDS);
}
/**
* 服务注册
*/
private void registry() {
this.consulServiceRegistry.register(this.consulAutoRegistration);
}
/**
* 检查服务状态
* @param service 服务
* @return 返回布尔值,正常true,异常false
*/
private boolean checkStatus(NewService service) {
// 检测标志
boolean flag = false;
try {
// 获取所有服务实例
List<ServiceInstance> instances = this.discoveryClient.getInstances(service.getName());
for (ServiceInstance instance : instances) {
// 判断是否为当前服务
if (instance.getServiceId().equals(service.getName())) {
flag = true;
break;
}
}
}catch (Exception e){
log.error(e.getMessage());
}
return flag;
}
}
consul重新注册,避免注册失败的情况。
最新推荐文章于 2023-09-15 16:40:44 发布