上面两篇写了如何使用nacos做配置中心,有兴趣的童鞋可以回头看一下,《springboot使用nacos做配置中心》,以及《springboot使用nacos做配置中心(下)》,分别介绍了作为配置中心,数据默认存储方式和数据存储到mysql数据库的方式。
当然,nacos另一个特点是可以做注册中心,相对于zookeeper和eureka,nacos有以下特点:
- 他同时支持AP和CP模式,他根据服务注册选择临时和永久来决定走AP模式还是CP模式
- 自带分布式配置中心
- 选主节点效率更高,相对于zookeeper的30-60秒,提升到4-5秒。
一、引入配置
最小依赖原则,只需要引入nacos-discovery-spring-boot-starter即可
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>${nacos-config-spring-boot.version}</version>
</dependency>
二、添加配置项
nacos:
discovery:
server-addr: {服务端IP}:8848
spring:
application:
name: service-provider
三、开启服务发现
采用切面的方式,将所有服务注册上去。
@SpringBootApplication
@NacosPropertySource(dataId = "mos", autoRefreshed = true)
public class CoreApplication {
@NacosInjected
private NamingService namingService;
@Value("${spring.application.name}")
private String applicationName;
@Value("${server.port}")
private Integer serverPort;
public static void main(String[] args) {
SpringApplication.run(CoreApplication.class, args);
}
@PostConstruct
public void registerService() throws NacosException {
namingService.registerInstance(applicationName, "127.0.0.1", serverPort);
}
}
四、测试
写一个测试类,获取当前注册的服务,nacos提供的有对应接口。
@RestController
@RequestMapping("discover")
public class DiscoverController {
@NacosInjected
private NamingService namingService;
@GetMapping("get")
public List<Instance> get(@RequestParam String serviceName) throws NacosException {
return namingService.getAllInstances(serviceName);
}
}
五、测试结果
1.服务未开启服务注册,返回一个空数组
-
开启服务注册后,会返回服务信息数组,如下图
image.png