1. 项目搭建

1.1. 引入依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>0.2.2-RC1</version>
</dependency>
<!--方便测试用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

1.2. 启动类

启动类和普通的springboot启动类配置一样就行了

1
2
3
4
5
6
@SpringBootApplication
public class NacosSampleSpringApp {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(NacosSampleSpringApp.class, args);
}
}

1.3. 配置中心

1.3.1. 配置类

1
2
3
4
5
6
7
8
9
10
11
@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848",namespace ="10e8ea4c-e9dc-42d9-a5e4-17aaba21a934" ))
@NacosPropertySource(
dataId = "kewen-data1",
groupId = "DEFAULT_GROUP_KEWEN",
autoRefreshed = true
)
/*@NacosPropertySource(dataId = "kewen-info")*/
public class NacosConfigConfig {

}

在spring中@EnableNacosConfig是必须要加上的,没有springboot不会被加入
@EnableNacosConfig中未指定namespace即为默认的public,需要指定时填入namspace的id,注意一定是id,填name无效

namespace

@NacosPropertySource默认groupId为DEFAULT_GROUP,namespace与@EnableNacosConfig保持一致

1.3.2. 使用类

使用的地方正常使用,和spirng的一致,前面已经分析过

1
2
3
4
5
6
7
8
9
10
11
12
@Service
public class NacosSampleService {

@NacosValue("${kewen.username}")
private String value;


public void helloValue(){
System.out.println(value);
}

}

1.4. 服务发现(未拿到,咋回事)

根据官方来的,但是未拿到实例列表,暂时不知咋回事

地址

1.4.1. 服务发现配置类

1
2
3
4
5
@Configuration
@EnableNacosDiscovery(globalProperties = @NacosProperties( serverAddr = "127.0.0.1:8848"))
public class NacosDiscoveryConfig {

}

1.4.2. 服务发现使用类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class DiscoveryController {


@NacosInjected
private NamingService namingService;

@GetMapping(value = "/getInstances")
public List<Instance> get(@RequestParam String serviceName) throws NacosException {
System.out.println("serviceName="+serviceName);
List<Instance> allInstances = namingService.getAllInstances(serviceName);
System.out.println("allInstances= "+allInstances);
return allInstances;
}
}

1.4.3. 测试使用

  1. 通过调用 Nacos Open API 向 Nacos server 注册一个名称为 example 服务。
    http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=kewen-test-discovery&ip=127.0.0.1&port=8080

  2. 查看是否注册上

    注册信息

  3. 调用本地接口获取实例列表
    localhost:8080/getInstances?serviceName=kewen-test-discovery

此处很奇怪,没有获取到值,注册服务用v2版本的又会报错,估计此处更新过,文档没有跟上

1.5. 配置管理

1.5.1. 配置管理配置类

1
2
3
4
@Configuration
@EnableNacos(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848",namespace = "10e8ea4c-e9dc-42d9-a5e4-17aaba21a934"))
public class NacosAllConfig {
}

此处的@EnableNacos会覆盖@EnableNacosDiscovery@EnableNacosConfig的配置,而且配置了@EnableNacos也不需要再配置其余两个

1.5.2. 配置管理使用

此处示例动态添加配置,当然也可以做其他的

1
2
3
4
5
6
7
@NacosInjected
ConfigService configService;

@Test
public void testPublishConfig() throws NacosException {
configService.publishConfig("kewen-app-dync","DEFAULT_GROUP", "kewen.username1=kewen");
}

1.5.3. nacos服务器查看是否成功

成功状态

状态

data_id

这样就展示了可以管理的配置

1.6. 监听器配置

两种方案,直接贴官方的,就不自己写代码了

监听器