SpringCloud之Eureka无痛迁移到Nacos

前言

Spring Cloud Alibaba实现了Spring Cloud服务注册规范——这让开发者能够非常便利、无痛地将Eureka迁移到Nacos

使用 Spring Cloud Alibaba 的开源组件 spring-cloud-starter-alibaba-nacos-discovery替换 Eureka,So Easy!

关于Nacos的安装,首先安装是非常简单,后面会有专门的文章介绍 。

另外0.2.x版本是适配SpringBoot2.0的,0.1.x是适配SpringBoot1.0的,不要以为是什么低版本不好用。

【官网安装教程】
https://nacos.io/en-us/docs/quick-start.html

maven依赖

【maven库】
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-alibaba-nacos-discovery

pom.xml中添加Nacos的spring-cloud-alibaba-nacos-discovery依赖,同时去掉Eureka的spring-cloud-starter-netflix-eureka-client依赖。



    org.springframework.cloud
    spring-cloud-alibaba-nacos-discovery
    0.2.1.RELEASE

application配置。

修改application配置application.properties

nacos.discovery.server-addr=127.0.0.1:8848
#有人说不生效,就试下下面的
#spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

如果是application.yml,请试下下面的配置

nacos:
    discovery:
      server-addr: 127.0.0.1:8848
#建议先用上面的
spring:
    cloud:
      nacos:
        discovery:
          server-addr: 127.0.0.1:8848

@EnableDiscoveryClient注解

更换EnableEurekaClient 注解。如果在你的应用启动程序启动类加了@EnableEurekaClient ,请修改为@EnableDiscoveryClient

@PostConstruct服务注册

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。也就是运行程序之后就注册到nacos上去。

@SpringBootApplication
@RestController
public class Springboot2NacosDiscoveryApplication {

	@NacosInjected
	private NamingService namingService;

	@Value("${server.port}")
	private int serverPort;

	@Value("${spring.application.name}")
	private String applicationName;

	@PostConstruct
	public void registerInstance() throws NacosException{
		namingService.registerInstance(applicationName,"127.0.0.1",serverPort);
	}

	@GetMapping( "/getInstance")
	public List getInstance(@RequestParam String serviceName) throws NacosException {
		return namingService.getAllInstances(serviceName);
	}

	public static void main(String[] args) {
		SpringApplication.run(Springboot2NacosDiscoveryApplication.class, args);
	}
}

  • registerInstance:注册实例,有多个方法,本文使用的方法需要传入三个参数,分别是:服务名,ip和端口号。
  • getAllInstances:获取实例,传入服务名。

你可能感兴趣的:(Spring,SpringBoot2启示录)