Spring Cloud 阿里巴巴参考文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud 阿里巴巴参考文档相关的知识,希望对你有一定的参考价值。

Spring

1. 简介

Spring Cloud阿里巴巴旨在为微服务开发提供一站式解决方案。该项目包括开发分布式应用程序和服务所需的组件,以便开发人员可以使用 Spring Cloud 编程模型轻松开发分布式应用程序。

使用春云阿里巴巴,你只需要添加一些注释和配置,就可以将阿里巴巴的分布式解决方案用于你的应用,用阿里巴巴中间件构建属于自己的分布式系统。

Spring Cloud阿里巴巴的特点:

  1. 流量控制和服务降级:支持WebServlet,WebFlux,OpenFeign,RestTemplate,Dubbo访问限制和降级流量的功能。它可以在运行时通过控制台实时修改限制和降级流的规则,并且还支持对限制和降级指标的监控。
  2. 服务注册和发现:可以注册服务,客户端可以使用 Spring 管理的 bean、自动集成功能区发现实例。
  3. 分布式配置:支持分布式系统中的外部化配置,配置发生变化时自动刷新。
  4. Rpc 服务:扩展 Spring Cloud 客户端 RestTemplate 和 OpenFeign 以支持调用 Dubbo RPC 服务。
  5. 事件驱动:支持构建与共享消息传递系统连接的高度可扩展的事件驱动微服务。
  6. 分布式事务:支持高性能、易用性的分布式事务解决方案。
  7. 阿里云对象存储:海量、安全、低成本、高可靠的云存储服务。支持随时随地在任何应用程序中存储和访问任何类型的数据。
  8. 阿里云调度程序X:准确、高可靠、高可用的调度作业调度服务,响应时间在秒级。
  9. 阿里云短信:覆盖全球的消息服务,阿里短信提供便捷、高效、智能的通信能力,帮助企业快速联系客户。

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):

Spring

有关更多 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 进行服务注册和发现,则可以设置。​​spring.cloud.nacos.discovery​​​​false​

  • 以下是启动提供程序的示例:
@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 包含两个属性:

  1. 订阅:显示当前服务订阅者
  2. 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 启动器的其他配置:

配置

钥匙

默认值

描述

服务器地址

​spring.cloud.nacos.discovery.server-addr​

Nacos 服务器侦听器的 IP 和端口

服务名称

​spring.cloud.nacos.discovery.service​

​$spring.application.name​

命名当前服务

重量

​spring.cloud.nacos.discovery.weight​

​1​

值范围:1 到 100。值越大,权重越大

网卡名称

​spring.cloud.nacos.discovery.network-interface​

如果未指定 IP 地址,则注册的 IP 地址为网卡的 IP 地址。如果未指定,则默认使用第一个网卡的 IP 地址。

注册的 IP 地址

​spring.cloud.nacos.discovery.ip​

最高优先级

注册的 IP 地址类型

​spring.cloud.nacos.discovery.ip-type​

​IPv4​

可以配置IPv4和IPv6,如果同一类型的网卡有多个IP地址,并且要指定特定的网段地址,则可以使用配置过滤器地址​​spring.cloud.inetutils.preferred-networks​

注册端口

​spring.cloud.nacos.discovery.port​

​-1​

默认情况下将自动检测。不需要配置。

Namespace

​spring.cloud.nacos.discovery.namespace​

一个典型的场景是隔离不同环境的服务注册,例如测试环境和生产环境之间的资源(配置、服务等)隔离

访问密钥

​spring.cloud.nacos.discovery.access-key​

阿里云账号访问密钥

密钥

​spring.cloud.nacos.discovery.secret-key​

阿里云账号密钥

元数据

​spring.cloud.nacos.discovery.metadata​

您可以以地图格式定义服务的一些元数据

日志文件名

​spring.cloud.nacos.discovery.log-name​

群集名称

​spring.cloud.nacos.discovery.cluster-name​

​DEFAULT​

纳科斯集群名称

端点

​spring.cloud.nacos.discovery.endpoint​

特定地域内某项服务的域名。您可以使用此域名动态检索服务器地址

是否集成负载均衡器

​spring.cloud.loadbalancer.nacos.enabled​

​false​

启用纳科斯手表

​spring.cloud.nacos.discovery.watch.enabled​

​true​

设置为 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​

Spring

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​) 为了解决这个问题,我们建议您在项目根文件中添加以下依赖项​​spring-cloud-alibaba’s version is ``2021.1​​​​nacos​​​​bootstrap.yml ​​​​application.yml​​​​pom.xml​

<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。​​spring.cloud.nacos.config.server-addr​​​​Domain name:port​​​​spring.cloud.nacos.config.server-addr=abc.com.nacos: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

Spring Cloud Alibaba Nacos 入门

阿里Sentinel支持Spring Cloud Gateway啦

spring cloud Nacos Config配置中心

Spring Cloud Gateway聚合Swagger文档

Spring Cloud Azure 参考文档