前言:

由于项目原先使用的Euraka并没有自带配置中心的功能,每次都要把配置文件放在git上更新,导致git拉取代码常常出现项目代码和项目中的config-server去拉取git上的配置总是容易冲突,所以现在将Euraka替换成Spring Cloud Alibaba Nacos。

开始

1、先本地需要安装 Nacos。__Nacos 的安装方式也是极其的简单,参考 Nacos 官网。假设现在已经正常启动了 Nacos 。

本地启动nacos可以看这篇。其中需要配置数据库参数。

2、添加 Nacos 的 pom 依赖,同时去掉 Eureka。 在需要替换的工程目录下找到 maven 的配置文件 pom.xml。添加如下的 pom 依赖:

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>0.2.1.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>nacos-discovery-spring-boot-starter</artifactId>
			<version>0.2.4</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba.nacos</groupId>
			<artifactId>nacos-client</artifactId>
			<version>1.2.0</version>
		</dependency>

3、(可选) 更换 EnableEurekaClient 注解。 如果在你的应用启动程序类加了 EnableEurekaClient 注解,这个时候需要更符合 Spring Cloud 规范的一个注解 EnableDiscoveryClient 。

4、创建DiscoveryController类,通过@NacosInjected注入nacos的NamingService,并提供discovery方法,可以根据服务名称获得注册到Nacos上的服务地址。

@RestController
public class DiscoveryController {

    @NacosInjected   // 通过注解注入nacos的NamingService,并提供discovery方法,可以根据服务名称获得注册到Nacos上的服务地址
    private NamingService namingService;

    @GetMapping("/discovery")
    public List<Instance> get(@RequestParam String serviceName) throws NacosException {
        return namingService.getAllInstances(serviceName);
    }
}

5、在bootstrap.yml文件中添加配置

spring:
  cloud:
    nacos:
      config.:
        server-addr: 10.7.60.63:8848
      discovery:
        server-addr: 10.7.60.63:8848
  application:
    name: example
  profiles:
    active: dev

启动工程之前先启动Nacos服务

6、先在服务器中访问 http://127.0.0.1:8080/discovery?serviceName=example

这个的意思是去Nacos服务器查询服务名称example所对应的地址信息,由于此时的Nacos Server并没有example的服务实例,放回一个空的JSON数组[]

7、接着,通过Nacos提供的OpenAPI,想Nacos Server注册一个名字为example的服务 (这个也可以自己去服务中心配置) 这个网址是: http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080 注意,最后的ip可能需要换成自己机器的地址。

8、记得在Nacos的控制台切换到public的命名空间

alt

9、再次访问 http://127.0.0.1:8080/discovery?serviceName=example 返回如下信息

alt