Nacos服务注册中心
1. Nacos概述
Nacos(Dynamic Naming and Configuration Service)是一个构建云原生应用的动态服务发现、配置管理和服务管理平台。官网地址为https://nacos.io/
Nacos提供注册中心+配置中心的功能,和之前的SpringCloud相比:
Nacos = Eureka+Config+Bus(netflix版本)
Nacos = Spring Cloud Consul(Spring cloud版本)
2. Nacos Vs其他
Nacos默认是AP模式,但也可以调整切换为CP。
3. Nacos安装
在官网下载即可,支持windows运行。
解压安装包,直接运行bin目录下的startup.cmd
如果启动不起来并报错找不到jmenv.tbsite.net,是因为nacos默认是集群模式下启动,nacos会向jmenv.tbsite.net 地址发送请求从而获取到集群内的其它服务中心地址信息,然后向其注册自己的信息;从而后续完成集群内的网络通信,选举等。
解决办法:修改startup.cmd加入-Dnacos.standalone=true参数:

4. 创建模块Nacos服务提供者
- 新建module, 创建cloudalibaba-provider-payment9001
- 添加pom依赖:
xml
<dependencies>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引入自己定义的api通用包 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--SpringBoot通用依赖模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!--Mysql数据库驱动8 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>- 创建application.yml
yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址- 编写业务类和启动类 创建PayAlibabaController类和Main9001:
java
@RestController
public class PayAlibabaController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/pay/nacos/{id}")
public String getPayInfo(@PathVariable("id") Integer id) {
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}java
@SpringBootApplication
@EnableDiscoveryClient
public class Main9001 {
public static void main(String[] args) {
SpringApplication.run(Main9001.class,args);
}
}启动程序,查看Nacos控制台:
5. 创建模块Nacos服务消费者
- 新建module, 创建cloudalibaba-consumer-nacos-order83
- 添加pom依赖:
xml
<dependencies>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 引入自己定义的api通用包 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--SpringBoot通用依赖模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!--Mysql数据库驱动8 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>- 创建application.yml
yml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务名称(nacos微服务提供者叫什么你写什么)
service-url:
nacos-user-service: http://nacos-payment-provider- 编写业务类和启动类 创建OrderNacosController类,RestTemplateConfig和Main83:
java
@RestController
public class OrderNacosController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/pay/nacos/{id}")
public String getPayInfo(@PathVariable("id") Integer id) {
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}java
@Configuration
public class RestTemplateConfig {
@Bean
//使用 @LoadBalanced注解赋予RestTemplate负载均衡的能力
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}java
@RestController
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping("/consumer/pay/nacos/{id}")
public String paymentInfo(@PathVariable("id") Integer id) {
String result = restTemplate.getForObject(serverURL + "/pay/nacos/" + id, String.class);
return result+"\t"+" 我是OrderNacosController83调用者。。。。。。";
}
}启动程序,查看Nacos控制台:
测试调用接口:
测试负载均衡功能:
在idea中复制Main9001的配置,添加JVM参数-DServer.port=9002:
