服务自动注册的实现

服务自动注册的实现由类 ConsulAutoServiceRegistration 完成。

bean创建的方式

在类 ConsulAutoServiceRegistrationAutoConfiguration 中,ConsulAutoServiceRegistration 的bean是这样创建的:

@Bean
@ConditionalOnMissingBean
public ConsulAutoServiceRegistration consulAutoServiceRegistration(ConsulServiceRegistry registry, ConsulDiscoveryProperties properties, ConsulAutoRegistration consulRegistration) {
    return new ConsulAutoServiceRegistration(registry, properties, consulRegistration);
}

类定义

ConsulAutoServiceRegistration 定义如下:

public class ConsulAutoServiceRegistration extends AbstractAutoServiceRegistration<ConsulRegistration> {
    // 额外保存了两个属性
    private ConsulDiscoveryProperties properties;
    private ConsulAutoRegistration registration;

    public ConsulAutoServiceRegistration(ConsulServiceRegistry serviceRegistry, ConsulDiscoveryProperties properties,
                                         ConsulAutoRegistration registration) {
        super(serviceRegistry);
        this.properties = properties;
        this.registration = registration;
    }
}

这里使用到的泛型和服务注册时一样,都是 ConsulRegistration 。

AbstractDiscoveryLifecycle 要求的方法实现

register()方法

@Override
protected void register() {
    // 多了一个配置项检查
    // 理论上可以设置不做注册?什么情况下用?
    if (!this.properties.isRegister()) {
        log.debug("Registration disabled.");
        return;
    }

    super.register();
}

deregister()/registerManagement()/deregisterManagement()方法类似。