Spring Cloud Alibaba(四):Nacos服务注册与发现、与Spring、Boot、Cloud集成
Nacos 提供了 SDK 及 Open API 的方式来完成服务注册与发现等操作。
Nacos 为 Spring,Spring Boot,Spring Cloud 集成提供了相应的 JAR 包和示例。
Nacos官网,Spring Cloud > Spring Cloud Alibaba,Github > Spring Cloud Alibaba,Github > Spring Cloud Alibaba Wiki,Github > Spring Cloud Alibaba Wiki > Nacos discovery,Github > Nacos。
服务注册与发现
Nacos 提供了 SDK 及 Open API 的方式来完成服务注册与发现等操作,Open API 是 REST 接口,所以 SDK 本质上是对 HTTP 请求的封装。下面是 Open API 演示服务注册与发现。
服务注册
注册一个服务实例到Nacos 服务,上报实例的服务名、IP地址、端口号,这三个参数是必须;上传还可以包括命名空间ID,权重,是否上线,是否健康,扩展信息,集群名,分组名,是否临时实例。
请求:
1 | curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080' |
返回:
1 | ok |
服务发现
请求:
1 | curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName' |
返回:
1 | { |
发布配置
请求:
1 | curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld" |
返回:
1 | true |
获取配置
请求:
1 | curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test" |
返回:
1 | HelloWorld |
Nacos Spring
Nacos 为 Spring 集成提供了 nacos-spring-context
包。提供了注解的方式很方便地实现服务注册与发现。
官方文档 > Nacos Spring,完整示列代码请参考:nacos-spring-config-example。
Nacos Spring Boot
Nacos 为 Spring Boot 集成提供了 starter 包:nacos-config-spring-boot-starter
。
通过自动配置以及其他 Spring 编程模型的习惯用法为 Spring Boot 应用程序在服务注册与发现方面提供和 Nacos 的无缝集成。 通过一些简单的注解,就可以快速注册一个服务。
完整示例代码可参考:nacos-spring-boot-discovery-example。
添加依赖
创建 Spring Boot 应用,添加 nacos-discovery-spring-boot-starter
依赖。
1 | <dependency> |
注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
配置Nacos服务
在 application.properties
中配置 Nacos server 的地址。
1 | 127.0.0.1:8848 = |
注册服务
通过调用 Nacos Open API 向 Nacos server 注册一个名称为 example
服务
1 | curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080' |
服务发现
使用 @NacosInjected
注入 Nacos 的 NamingService
实例:
1 |
|
启动 Spring Boot 应用,调用 curl http://localhost:8080/discovery/get?serviceName=example
,返回内容为:
1 | [ |
如果没有注册服,返回的是一个为空 JSON 数组[]
。
Nacos Spring Cloud
Nacos 基于 Spring Cloud 规范为集成提供 spring-cloud-starter-alibaba-nacos-config
包,可以与 Spring Boot 和 Spring Cloud 无缝衔接,支持 Feign 调用。
示例代码:spring-cloud-alibaba/spring-cloud-alibaba-examples/nacos-example/
添加依赖
1 | <dependency> |
注意:
- 版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本
- 版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本
- 版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本
更多版本对应关系参考:版本说明 Wiki
服务提供者
配置服务提供者,从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。
在
application.properties
中配置 Nacos server 的地址:1
2
3
48070 =
service-provider =
127.0.0.1:8848 =通过 Spring Cloud 原生注解
@EnableDiscoveryClient
开启服务注册发现功能:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
class EchoController {
public String echo( String string){
return "Hello Nacos Discovery " + string;
}
}
}注:Spring Boot 项目引入的
spring-cloud-starter-alibaba-nacos-discovery
包中开启了自动配置,@EnableDiscoveryClient
注解可以忽略。
服务消费者
配置服务消费者,从而服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。
1
2
3
48080 =
service-consumer =
127.0.0.1:8848 =发现服务:通过 Spring Cloud 原生注解
@EnableDiscoveryClient
开启服务注册发现功能。给 RestTemplate 实例添加@LoadBalanced
注解,开启@LoadBalanced
与 Ribbon 的集成。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class NacosConsumerApplication {
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
public class TestController {
private final RestTemplate restTemplate;
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
public String echo( String str){
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
}启动
ProviderApplication
和ConsumerApplication
,调用http://localhost:8080/echo/2018
,返回内容为Hello Nacos Discovery 2018
。
Nacos自动配置
Nacos Spring Cloud 包spring-cloud-starter-alibaba-nacos-discovery
依赖关系:
引入了 spring-cloud-commons,该包主要为 Spring Cloud 的服务注册发现,负载均衡,服务熔断,服务监控,服务调用提供了抽象,为 RestTemplate 启用了 Ribbon 负载均衡。
引入了 spring-cloud-starter-netflix-ribbon,该包是客户端侧负载均衡具体实现。
spring-cloud-alibaba-nacos-discovery
为 Nacos 服务发现,服务发现客户端配置,服务注册,集成 Ribbon 负载均衡、配置管理服务 提供了自动配置。
spring.factories
1 | \ = |
基于以上自动配置,@EnableDiscoveryClient
和 @LoadBalanced
注解实际是可以省略的。
Spring Cloud Alibaba(四):Nacos服务注册与发现、与Spring、Boot、Cloud集成
http://blog.gxitsky.com/2021/04/09/SpringCloudAlibaba-04-nacos-discovery-springboot/