Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。在Spring Cloud生态系统中,Nacos可以替代Eureka作为服务注册中心,同时也可以作为配置中心。所以我们这里使用Nacos作为Spring Cloud应用的服务注册中心和配置中心。
使用Nacos的好处
-
统一管理:
- Nacos集成了服务发现和配置管理,减少了运维复杂度。
-
动态配置管理:
- 支持动态配置更新,减少系统重启成本。
-
易用性:
- 提供了简洁的用户界面和丰富的API,方便操作和管理。
-
高可用性:
- 支持集群部署,提供高可用性和稳定性。
使用Nacos的具体步骤
下面,我们将创建一个简单的Spring Cloud应用,使用Nacos作为服务注册中心和配置中心。
1. 下载并启动Nacos
下载Nacos的最新版本并启动。可以从Nacos官网下载。
解压后,进入Nacos目录并启动:
sh startup.sh -m standalone
访问Nacos控制台:http://localhost:8848/nacos
默认用户名和密码都是nacos
。
2. 创建Spring Boot项目
使用Spring Initializr创建一个Spring Boot项目,添加以下依赖:
- Spring Web
- Spring Boot Actuator
- Nacos Discovery
- Nacos Config
3. 配置Nacos
在项目的application.properties
文件中配置Nacos。
application.properties:
spring.application.name=my-service
server.port=8080# Nacos 配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
4. 服务注册与发现
创建一个简单的微服务,并将其注册到Nacos。
MyServiceApplication.java:
@SpringBootApplication
@RestController
@EnableDiscoveryClient
public class MyServiceApplication {public static void main(String[] args) {SpringApplication.run(MyServiceApplication.class, args);}@GetMapping("/hello")public String sayHello() {return "Hello from MyService!";}
}
启动微服务:
mvn spring-boot:run
5. 使用Nacos作为配置中心
在Nacos控制台中,添加配置。在Config Management
中创建一个配置文件,Data ID为my-service.yaml
,内容如下:
server:port: 8080spring:application:name: my-servicecloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848
在项目的bootstrap.properties
中添加如下配置,使应用启动时加载Nacos配置:
bootstrap.properties:
spring.application.name=my-service
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=yaml
6. 创建客户端服务
创建一个负载均衡客户端,并使用RestTemplate进行服务调用。
application.properties:
spring.application.name=client-service
server.port=8081spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
ClientServiceApplication.java:
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ClientServiceApplication {@Autowiredprivate RestTemplate restTemplate;public static void main(String[] args) {SpringApplication.run(ClientServiceApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}@GetMapping("/call")public String callService() {return restTemplate.getForObject("http://my-service/hello", String.class);}
}
启动客户端服务:
mvn spring-boot:run
7. 测试微服务
现在,我们可以通过以下URL测试各个微服务:
- Nacos控制台:http://localhost:8848/nacos
- MyService服务:http://localhost:8080/hello
- ClientService服务:http://localhost:8081/call