解決consul覆蓋注冊


默認注冊consul的服務id為服務名-端口號,相同的服務名和端口號注冊會覆蓋
解決方式:

1.自定義Consul注冊Id

import com.ecwid.consul.v1.ConsulClient;
import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties;
import org.springframework.cloud.consul.discovery.HeartbeatProperties;
import org.springframework.cloud.consul.discovery.TtlScheduler;
import org.springframework.cloud.consul.serviceregistry.ConsulRegistration;
import org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry;

/**
 * @describe: 自定義consul注冊id
 * @author: zhuCw
 * @date: 2019/4/25 17:57
 */
public class RpsConsulServiceRegistry extends ConsulServiceRegistry {
  public RpsConsulServiceRegistry(
      ConsulClient client,
      ConsulDiscoveryProperties properties,
      TtlScheduler ttlScheduler,
      HeartbeatProperties heartbeatProperties) {
    super(client, properties, ttlScheduler, heartbeatProperties);
  }

  @Override
  public void register(ConsulRegistration reg) {
    // 重新設計id,此處用的是名字也可以用其他方式例如instanceid、host、uri等
    reg.getService()
        .setId(
            reg.getService().getName() + "-" + reg.getService().getAddress() + "-" + reg.getPort());
    super.register(reg);
  }
}
2. 放入容器

import com.ecwid.consul.v1.ConsulClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties;
import org.springframework.cloud.consul.discovery.HeartbeatProperties;
import org.springframework.cloud.consul.discovery.TtlScheduler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @describe: TODO
 * @author: zhuCw
 * @date: 2019/4/25 17:57
 */
@Configuration
public class RpsConsulServiceRegistryConfig {
  @Autowired(required = false)
  private TtlScheduler ttlScheduler;

  @Bean
  public RpsConsulServiceRegistry consulServiceRegistry(
      ConsulClient consulClient,
      ConsulDiscoveryProperties properties,
      HeartbeatProperties heartbeatProperties) {
    return new RpsConsulServiceRegistry(
        consulClient, properties, ttlScheduler, heartbeatProperties);
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM