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: 8080 spring: application: name: my-service cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: 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=8081 spring.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 { @Autowired private RestTemplate restTemplate; public static void main(String[] args) { SpringApplication.run(ClientServiceApplication.class, args); } @Bean @LoadBalanced public 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