Spring Cloud 阿里巴巴参考文档
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud 阿里巴巴参考文档相关的知识,希望对你有一定的参考价值。
1. 简介
Spring Cloud阿里巴巴旨在为微服务开发提供一站式解决方案。该项目包括开发分布式应用程序和服务所需的组件,以便开发人员可以使用 Spring Cloud 编程模型轻松开发分布式应用程序。
使用春云阿里巴巴,你只需要添加一些注释和配置,就可以将阿里巴巴的分布式解决方案用于你的应用,用阿里巴巴中间件构建属于自己的分布式系统。
Spring Cloud阿里巴巴的特点:
- 流量控制和服务降级:支持WebServlet,WebFlux,OpenFeign,RestTemplate,Dubbo访问限制和降级流量的功能。它可以在运行时通过控制台实时修改限制和降级流的规则,并且还支持对限制和降级指标的监控。
- 服务注册和发现:可以注册服务,客户端可以使用 Spring 管理的 bean、自动集成功能区发现实例。
- 分布式配置:支持分布式系统中的外部化配置,配置发生变化时自动刷新。
- Rpc 服务:扩展 Spring Cloud 客户端 RestTemplate 和 OpenFeign 以支持调用 Dubbo RPC 服务。
- 事件驱动:支持构建与共享消息传递系统连接的高度可扩展的事件驱动微服务。
- 分布式事务:支持高性能、易用性的分布式事务解决方案。
- 阿里云对象存储:海量、安全、低成本、高可靠的云存储服务。支持随时随地在任何应用程序中存储和访问任何类型的数据。
- 阿里云调度程序X:准确、高可靠、高可用的调度作业调度服务,响应时间在秒级。
- 阿里云短信:覆盖全球的消息服务,阿里短信提供便捷、高效、智能的通信能力,帮助企业快速联系客户。
2. 依赖管理
如果您是 Maven Central 用户,请将我们的 BOM 添加到您的 pom.xml <依赖项管理>部分。这将允许您省略任何 Maven 依赖项的版本,而是将版本控制委托给 BOM。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.4.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在以下部分中,将假定您使用的是 Spring Cloud 阿里巴巴 BOM,并且依赖项代码段将不包含版本。
3. Spring Cloud阿里巴巴纳科斯发现
Nacos 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序。
通过Spring Cloud阿里巴巴Nacos发现,您可以快速访问基于Spring Cloud编程模型的Nacos服务注册功能。
3.1. 服务注册/发现:Nacos 发现
服务发现是微服务体系结构中的关键组件之一。在这样的体系结构中,为每个客户端手动配置服务列表可能是一项艰巨的任务,并且使动态扩展变得极其困难。 Nacos Discovery帮助您自动将服务注册到Nacos服务器,Nacos服务器会跟踪服务并动态刷新服务列表。此外,纳科斯 发现将服务实例的一些元数据(例如主机、端口、运行状况检查 URL、主页)注册到 Nacos。有关如何下载和启动 Nacos 的详细信息,请参阅Nacos 网站。
3.2. 如何引入 Nacos 发现进行服务注册/发现
请使用组 ID 为 和工件 ID 为 的启动器。com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.3. 使用 Nacos 发现进行服务注册/发现和调用的示例
Nacos Discovery与Netflix Ribbon集成,RestTemplate或OpenFeign可用于服务到服务呼叫。
3.3.1. Nacos 服务器启动
有关如何下载和启动 Nacos 的详细信息,请参阅Nacos 网站。
Nacos 服务器启动后,进入http://ip:8848查看控制台(默认账号名/密码为 nacos/nacos):
有关更多 Nacos 服务器版本,您可以从发布页面下载最新版本。
3.3.2. 启动提供程序应用程序
以下示例说明了如何将服务注册到 Nacos。
- pom的配置.xml以下是pom.xml的完整示例:
绒球.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>open.source.test</groupId>
<artifactId>nacos-discovery-test</artifactId>
<version>1.0-SNAPSHOT</version>
<name>nacos-discovery-test</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>$spring.boot.version</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring.cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>$spring.cloud.alibaba.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- application.properties 的配置 Nacos 的一些基本配置必须包含在 application.properties(或 application.yaml)中,如下所示:
应用程序属性
server.port=8081
spring.application.name=nacos-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
注意 | 如果您不想使用 Nacos 进行服务注册和发现,则可以设置。 |
- 以下是启动提供程序的示例:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication
public static void main(String[] args)
SpringApplication.run(NacosProviderDemoApplication.class, args);
@RestController
public class EchoController
@GetMapping(value = "/echo/string")
public String echo(@PathVariable String string)
return "Hello Nacos Discovery " + string;
现在您可以在 Nacos 控制台上看到已注册的服务。
注意 | 在启动提供程序应用程序之前,请先启动 Nacos。详情请参阅Naco网站。 |
3.3.3. 启动消费者应用程序
这可能不像启动提供程序应用程序那么容易,因为使用者需要调用提供程序的 RESTful 服务。在这个例子中,我们将使用最原始的方式,即 显式组合 LoadBalanceClient 和 RestTemplate 以访问 RESTful 服务。 您可以参考第 1.2 节了解 pom.xml 和 application.properties 配置。以下是启动使用者应用程序的示例代码。
注意 | 您还可以通过使用具有负载平衡的 RestTemplate 和 FeignClient 来访问该服务。 |
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp
@RestController
public class NacosController
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@Value("$spring.application.name")
private String appName;
@GetMapping("/echo/app-name")
public String echoAppName()
//Access through the combination of LoadBalanceClient and RestTemplate
ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
String path = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
System.out.println("request path:" +path);
return restTemplate.getForObject(path,String.class);
//Instantiate RestTemplate Instance
@Bean
public RestTemplate restTemplate()
return new RestTemplate();
public static void main(String[] args)
SpringApplication.run(NacosConsumerApp.class,args);
在此示例中,我们注入了一个 LoadBalancerClient 实例,并手动实例化了一个 RestTemplate。同时,我们将配置值注入到应用中, 以便在调用提供程序的服务时可以显示当前应用程序名称。spring.application.name
注意 | 请在启动消费者应用程序之前启动 Nacos。详情请参阅纳科斯网站。 |
接下来,访问消费者提供的接口。在这里,我们开始了 8082 的端口。访问结果如下所示:http://ip:port/echo/app-name
Address:http://127.0.0.1:8082/echo/app-name
Access result: Hello Nacos Discovery nacos-consumer
3.4. 纳科斯发现端点
Nacos Discovery 在内部为一个端点提供了一个相应的端点 ID。nacosdiscovery
终结点公开的 json 包含两个属性:
- 订阅:显示当前服务订阅者
- NacosDiscoveryProperties:显示当前服务的当前基本Nacos配置
下面显示了服务实例如何访问终结点:
"subscribe": [
"jsonFromServer": "",
"name": "nacos-provider",
"clusters": "",
"cacheMillis": 10000,
"hosts": [
"instanceId": "30.5.124.156#8081#DEFAULT#nacos-provider",
"ip": "30.5.124.156",
"port": 8081,
"weight": 1.0,
"healthy": true,
"enabled": true,
"cluster":
"serviceName": null,
"name": null,
"healthChecker":
"type": "TCP"
,
"defaultPort": 80,
"defaultCheckPort": 80,
"useIPPort4Check": true,
"metadata":
,
"service": null,
"metadata":
],
"lastRefTime": 1541755293119,
"checksum": "e5a699c9201f5328241c178e804657e11541755293119",
"allIPs": false,
"key": "nacos-provider",
"valid": true
],
"NacosDiscoveryProperties":
"serverAddr": "127.0.0.1:8848",
"endpoint": "",
"namespace": "",
"logName": "",
"service": "nacos-provider",
"weight": 1.0,
"clusterName": "DEFAULT",
"metadata":
,
"registerEnabled": true,
"ip": "30.5.124.201",
"networkInterface": "",
"port": 8082,
"secure": false,
"accessKey": "",
"secretKey": ""
3.5. 重量路线
3.5.1. 弹簧云负载均衡器
绒球.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
</dependencies>
应用程序属性
spring.cloud.loadbalancer.ribbon.enabled=false
spring.cloud.loadbalancer.nacos.enabled=true
3.6. 有关 Nacos 发现启动器配置的更多信息
下面显示了 Nacos Discovery 启动器的其他配置:
配置 | 钥匙 | 默认值 | 描述 |
服务器地址 | | Nacos 服务器侦听器的 IP 和端口 | |
服务名称 | | | 命名当前服务 |
重量 | | | 值范围:1 到 100。值越大,权重越大 |
网卡名称 | | 如果未指定 IP 地址,则注册的 IP 地址为网卡的 IP 地址。如果未指定,则默认使用第一个网卡的 IP 地址。 | |
注册的 IP 地址 | | 最高优先级 | |
注册的 IP 地址类型 | | | 可以配置IPv4和IPv6,如果同一类型的网卡有多个IP地址,并且要指定特定的网段地址,则可以使用配置过滤器地址 |
注册端口 | | | 默认情况下将自动检测。不需要配置。 |
Namespace | | 一个典型的场景是隔离不同环境的服务注册,例如测试环境和生产环境之间的资源(配置、服务等)隔离 | |
访问密钥 | | 阿里云账号访问密钥 | |
密钥 | | 阿里云账号密钥 | |
元数据 | | 您可以以地图格式定义服务的一些元数据 | |
日志文件名 | | ||
群集名称 | | | 纳科斯集群名称 |
端点 | | 特定地域内某项服务的域名。您可以使用此域名动态检索服务器地址 | |
是否集成负载均衡器 | | | |
启用纳科斯手表 | | | 设置为 false 以关闭监视 |
4. Spring Cloud阿里巴巴 Nacos 配置
Nacos 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序。
使用Spring Cloud Alibaba Nacos Config,基于Spring Cloud的编程模型,快速访问Nacos配置管理功能。
4.1. 如何引入 Nacos 配置进行配置
请使用组 ID 为 和工件 ID 为 的启动器。com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
4.2. 快速入门
Nacos Config使用DataId和GROUP来确定配置。
下图显示了 DataId 使用、GROUP 使用和配置格式为 Properties 的配置项:myDataid
DEFAULT_GROUP
4.2.1. 初始化 Nacos 服务器
具体启动方法请参考 Spring Cloud阿里巴巴 Nacos 发现版块的“Nacos 服务器启动”部分。
Nacos 服务器启动后,添加如何配置它:
Data ID: nacos-config.properties
Group : DEFAULT_GROUP
Configuration format: Properties
Configuration content: user.name=nacos-config-properties
user.age=90
注意 | DataId 的默认文件扩展名为属性。 |
客户端上的使用情况
如果要使用 Nacos 管理应用程序的外部化配置,请使用组 ID 和工件 ID 的启动器。com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
现在我们可以创建一个标准的 Spring Boot 应用程序。
@SpringBootApplication
public class NacosConfigApplication
public static void main(String[] args)
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" +userName+"; age: "+userAge);
注意 | 请注意,当你,因为获取文件中的配置将在文件之前加载。 根据 Spring 提到的官方文档 [bootstrap](https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#config-first-bootstrap) 为了解决这个问题,我们建议您在项目根文件中添加以下依赖项 |
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.1</version>
</dependency>
在运行此示例之前,我们需要在 bootstrap.properties 中配置 Nacos 服务器的地址。例如:
bootstrap.properties
# DataId By default, the `spring.application.name` configuration is combined with the file extension (the configuration format uses properties by default), and the GROUP is not configured to use DEFAULT_GROUP by default. Therefore, the Nacos Config configuration corresponding to the configuration file has a DataId of nacos-config.properties and a GROUP of DEFAULT_GROUP
spring.application.name=nacos-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
注意 | 如果您使用域名访问 Nacos,则格式应该是。 例如,如果 Nacos 域名是 abc.com.nacos,而 listerner port 是 80,那么配置应该是。 不能省略端口 80。 |
运行此示例,您可以看到以下输出:
2018-11-02 14:24:51.638 INFO 32700 --- [main] c.a.demo.provider.NacosConfigApplication : Started NacosConfigApplication in 14.645 seconds (JVM running for 15.139)
user name :nacos-config-properties; age: 90
2018-11-02 14:24:51.688 INFO 32700 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@a8c5e74: startup date [Fri Nov 02 14:24:51 CST 2018]; root of context hierarchy
4.3. 使用 YAML 格式添加具有数据 ID 的配置
Nacos Config也支持yaml格式。您只需要完成以下 2 个步骤。
1、在bootstrap.properties文件中,添加以下行,声明DataId的格式为yaml。如下:
bootstrap.properties
spring.cloud.nacos.config.file-extension=yaml
2、在 Nacos 控制台添加 yaml 格式的 DataId 配置,如下图所示:
Data ID: nacos-config.yaml
Group : DEFAULT_GROUP
Configuration format: YAML
Configuration content: user.name: nacos-config-yaml
user.age: 68
完成前面的两个步骤后,重新启动测试程序,您将看到以下结果。
2018-11-02 14:59:00.484 INFO 32928 --- [main] c.a.demo.provider.NacosConfigApplication:Started NacosConfigApplication in 14.183 seconds (JVM running for 14.671)
user name :nacos-config-yaml; age: 68
2018-11-02 14:59:00.529 INFO 32928 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@265a478e: startup date [Fri Nov 02 14:59:00 CST 2018]; root of context hierarchy
4.4. 支持动态配置
Nacos Config还支持动态配置更新。启动 Spring 引导应用程序测试的代码如下:
@SpringBootApplication
public class NacosConfigApplication
public static void main(String[] args)
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
while(true)
//When configurations are refreshed dynamically, they will be updated in the Enviroment, therefore here we retrieve configurations from Environment every other second.
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" + userName + "; age: " + userAge);
TimeUnit.SECONDS.sleep(1);
更改 user.name 时,可以从应用程序中检索最新值,如下所示:
user name :nacos-config-yaml; age: 68
user name :nacos-config-yaml; age: 68
user name :nacos-config-yaml; age: 68
2018-11-02 15:04:25.069 INFO 32957 --- [-127.0.0.1:8848] o.s.boot.SpringApplication : Started application in 0.144 seconds (JVM running for 71.752)
2018-11-02 15:04:25.070 INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@10c89124: startup date [Fri Nov 02 15:04:25 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7
2018-11-02 15:04:25.071 INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7: startup date [Fri Nov 02 15:04:24 CST 2018]; root of context hierarchy
//Read the updated value from Enviroment
user name :nacos-config-yaml-update; age: 68
user name :nacos-config-yaml-update; age: 68
注意 | 您可以使用此设置“spring.cloud.nacos.config.refresh.enabled=false”禁用自动刷新。 |
4.5. 支持配置文件级别的配置
当 Nacos Configuration 加载配置时,还会加载具有 DataId of 和 DataId of 的基本配置。如果需要使用不同环境中的不同配置,可以使用 Spring 提供的配置。$spring.application.name. $file-extension:properties
$spring.application.name-$profile. $file-extension:properties
$spring.profiles.active
spring.profiles.active=develop
注意 | 在配置文件中指定时,$spring.profiles.active 必须放在 bootstrap.properties 中。 |
在 Nacos 中添加一个基本配置,DataId 为 nacos-config-develop.yaml,如下所示:
Data ID: nacos-config-develop.yaml
Group : DEFAULT_GROUP
Configuration format: YAML
Configuration content: current.env: develop-env
运行以下 Spring Boot 应用程序测试代码:
@SpringBootApplication
public class NacosConfigApplication
public static void main(String[] args)
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
while(true)
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
//Get the current deployment environment
String currentEnv = applicationContext.getEnvironment().getProperty("current.env");
System.err.println("in "+currentEnv+" enviroment; "+"user name :" + userName + "; age: " + userAge);
TimeUnit.SECONDS.sleep(1);
启动后,您可以在控制台中看到如下输出:
in develop-env enviroment; user name :nacos-config-yaml-update; age:以上是关于Spring Cloud 阿里巴巴参考文档的主要内容,如果未能解决你的问题,请参考以下文章
阿里开源项目大 PK,Dubbo VS Spring Cloud
阿里Sentinel支持Spring Cloud Gateway啦