以下是SpringBoot集成Nacos的详细教程:
准备工作
- 下载Nacos
可以在Nacos官网中下载最新版本的Nacos服务端。
- 安装Nacos
解压下载的压缩包,在bin目录下运行以下命令启动Nacos服务:
bash
sh startup.sh -m standalone
运行成功后,可以通过浏览器访问 http://localhost:8848/nacos/ 来查看Nacos控制台。
- 创建SpringBoot工程
在IDEA或Eclipse中创建一个新的SpringBoot项目。
这里不再赘述如何创建SpringBoot项目的详细步骤,可以参考官方文档或自行搜索。
- 添加依赖
在pom.xml文件中添加Nacos、SpringCloud和其他相关依赖:
xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
注册服务到Nacos
在SpringBoot项目中添加以下代码,将服务注册到Nacos:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${server.port}")
private int port;
@Value("${spring.application.name}")
private String serviceName;
@PostConstruct
public void registerToNacos() throws NacosException {
NamingService namingService = NamingFactory.createNamingService("localhost:8848");
namingService.registerInstance(serviceName, "localhost", port);
}
}
其中,@EnableDiscoveryClient
注解告诉Spring Boot应用程序将启用服务注册和发现,@PostConstruct
注解指示方法在应用程序启动时执行。
这里通过Nacos提供的NamingService
将服务注册到Nacos中,并指定了服务的名称、IP地址和端口号。
从Nacos中获取配置
在SpringBoot项目中添加以下代码,从Nacos获取配置:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class ConfigController {
@Value("${config.name}")
private String configName;
@Value("${config.value}")
private String configValue;
@GetMapping("/config")
public String getConfig() {
return configName + ": " + configValue;
}
}
其中,@RefreshScope
注解用于在配置发生变化时重新加载Bean。
在Nacos控制台中,添加配置文件:
{
"config": {
"name": "demo",
"value": "Spring Cloud Nacos Config"
}
}
通过URL访问http://localhost:8080/config,即可获取到配置的名字和值。
示例1:Nacos服务发现
在另一个Spring Boot项目中,向Nacos注册一个服务:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${spring.application.name}")
private String serviceName;
@GetMapping("/service-name")
public String getServiceName() {
return serviceName;
}
}
在另一个Spring Boot项目中,通过Nacos的服务发现功能,获取到注册在Nacos中的服务列表,并选择一个服务进行远程调用:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@Controller
public class HelloController {
private final RestTemplate restTemplate;
private final DiscoveryClient discoveryClient;
@Autowired
public HelloController(RestTemplate restTemplate, DiscoveryClient discoveryClient) {
this.restTemplate = restTemplate;
this.discoveryClient = discoveryClient;
}
@GetMapping("/hello")
public ResponseEntity<String> hello() {
List<ServiceInstance> instances = discoveryClient.getInstances("demo-service");
if (instances.size() == 0) {
return ResponseEntity.notFound().build();
}
String url = instances.get(0).getUri() + "/service-name";
return restTemplate.getForEntity(url, String.class);
}
}
在上述代码中,通过DiscoveryClient
获取服务的列表,选择第一个服务实例并从中获取其URI,在远程调用时通过这个URI调用服务的/service-name
接口。
示例2:Nacos配置管理
在Spring Boot项目中,添加以下代码,读取Nacos中的配置:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@RefreshScope
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${config.name}")
private String configName;
@GetMapping("/config")
public String getConfig() {
return configName;
}
}
在Nacos控制台中,修改配置文件内容:
{
"config": {
"name": "Spring Nacos Config"
}
}
选择配置发布、更新即可看到应用程序中的新配置。
总结:
通过本文的介绍,可以看出,集成Nacos几乎于Spring Boot无缝衔接,只需简单的配置和几行代码即可实现服务注册、发现和配置管理功能。如果您已经使用了Spring Cloud相关的技术栈,那么使用Nacos将会轻松不少。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot集成Nacos的详细教程 - Python技术站