作者:IT可乐
链接:https://www.zhihu.com/question/587629412/answer/2923180179
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
首先我们看下 Nacos 的官方介绍:
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理 微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及 流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、 云原生范式) 的服务基础设施。
下面是 Spring Boot 集成 Nacos 的详细步骤:
1、添加 Nacos 相关依赖
在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2、配置 Nacos 注册中心地址
在 application.properties 或 application.yml 文件中添加以下配置:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
其中,127.0.0.1:8848 是你本地的 Nacos 服务地址,根据实际情况修改。
3、开启 Nacos 服务注册功能
在启动类上添加 @EnableDiscoveryClient
注解,开启 Nacos 服务注册功能。
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、使用 Nacos 服务发现
在需要使用服务的类中,通过 @Autowired
注入 DiscoveryClient
,使用其 getInstances
方法获取服务实例列表。
@RestController
public class HelloController {
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/hello")
public String hello() {
List<ServiceInstance> instances = discoveryClient.getInstances("service-provider");
if (instances.size() == 0) {
return "No instances available.";
}
ServiceInstance instance = instances.get(0);
String url = instance.getUri() + "/hello";
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject(url, String.class);
}
}
其中,"service-provider"
是需要获取服务实例的服务名称,根据实际情况修改。
至此,Spring Boot 集成 Nacos 的步骤已经完成了。完整代码如下:
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@RestController
public class HelloController {
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/hello")
public String hello() {
List<ServiceInstance> instances = discoveryClient.getInstances("service-provider");
if (instances.size() == 0) {
return "No instances available.";
}
ServiceInstance instance = instances.get(0);
String url = instance.getUri() + "/hello";
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject(url, String.class);
}
}
5、注意事项
在使用 Spring Boot 集成 Nacos 进行服务注册和发现时,需要注意以下几点:
- Nacos 注册中心地址配置
在配置 Nacos 注册中心地址时,需要保证配置的地址是正确的。如果使用的是本地的 Nacos 服务,可以配置为 127.0.0.1:8848
。如果使用的是远程的 Nacos 服务,则需要将地址配置为远程 Nacos 服务的地址。
- 服务名称的配置
在使用 Nacos 进行服务注册和发现时,需要为每个服务配置一个唯一的服务名称。在服务注册时,需要使用该服务名称向 Nacos 注册中心进行注册。在服务发现时,也需要使用该服务名称来获取服务实例列表。因此,需要保证服务名称的唯一性。
- 多环境配置
在实际项目中,可能需要在不同的环境(如开发环境、测试环境、生产环境)中使用不同的 Nacos 注册中心地址和服务名称。为了方便配置,可以将这些配置抽取到对应的配置文件中,通过 Spring Boot 的多环境配置功能进行管理。
- 使用 Nacos 的高可用模式
为了保证 Nacos 的可靠性,建议使用 Nacos 的高可用模式。具体来说,可以将多个 Nacos 服务部署在不同的节点上,并将它们组成一个集群。在客户端使用 Nacos 服务时,可以配置多个 Nacos 注册中心地址,当一个地址不可用时,自动切换到另一个地址,从而实现高可用性。
- 服务健康检查
在使用 Nacos 进行服务注册和发现时,建议为每个服务配置健康检查功能。在服务注册时,需要配置服务的健康检查地址和检查间隔时间。Nacos 将定期向服务的健康检查地址发送检查请求,如果服务无法正常响应,Nacos 将自动将该服务实例从服务列表中移除,以保证服务的可用性。