1.Spring Cloud Alibaba的功能:
1.流控制和服务降级:支持WebServlet,WebFlux,OpenFeign,RestTemplate,Dubbo访问限制和降级流的功能。它可以在运行时通过控制台实时修改限制和降级流的规则,并且还支持监视限制和降级度量标准。
2.服务注册和发现:可以注册服务,客户可以使用Spring托管的bean,自动集成功能区发现实例。
3.分布式配置:支持分布式系统中的外部配置,配置更改时自动刷新。
4.Rpc服务:扩展Spring Cloud客户端RestTemplate和OpenFeign以支持调用Dubbo RPC服务。
5.事件驱动:支持构建与共享消息系统连接的高度可扩展的事件驱动微服务。
6.分布式事务:支持高性能且易于使用的分布式事务解决方案。
7.阿里云对象存储:大规模,安全,低成本,高度可靠的云存储服务。支持随时随地在任何应用程序中存储和访问任何类型的数据。
8.阿里云SchedulerX:准确,高度可靠,高可用性的计划作业调度服务,响应时间在几秒钟之内。
9.阿里云短信:阿里云短信服务覆盖全球,提供便捷,高效,智能的通信功能,帮助企业快速联系客户。
2.依赖管理
添加依赖到pom.xml 部分。这将允许您忽略任何Maven依赖项的版本,而是将版本委派给BOM。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.服务注册/ 发现
3.1 服务发现
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.3使用Nacos Discovery进行服务注册/发现和呼叫的示例
Nacos Discovery与Netflix Ribbon,RestTemplate或OpenFeign集成在一起,可用于服务到服务的呼叫
3.3.1启动应用程序
pom.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的配置
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。
启动provider程序
@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控制台上查看已注册的服务
3.3.2启动消费者应用程序
@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);
}
}
接下来,访问http://localhost:8081/echo/app-name使用者提供的界面。在这里,我们启动了8082端口。访问结果如下:
Address:http://127.0.0.1:8082/echo/app-name
Access result: Hello Nacos Discovery nacos-consumer
配置 | Key | 默认值 | 描述 |
---|---|---|---|
服务器地址 | 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 | 最高优先级 | |
注册端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下将自动检测。不需要配置。 |
命名空间 | 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 | Nacos的集群名称 |
endpoint | spring.cloud.nacos.discovery.endpoint | 特定服务在特定区域中的域名。您可以使用该域名动态检索服务器地址 | |
是否集成ribbon | ribbon.nacos.enabled | true | 在大多数情况下设置为true |
启用Nacos监听 | spring.cloud.nacos.discovery.watch.enabled | true | 设置为false以关闭手表 |
4. Nacos Config
4.1 Nacos Config配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
bootstrap.properties.
spring.application.name=nacos-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
取值方式:
4.2支持自定义命名空间
命名空间用于隔离不同租户的配置。在不同的命名空间中,组和数据ID可以相同。命名空间的典型场景是隔离不同环境的配置,例如,开发/测试环境与生产环境(配置和服务等)之间的隔离。
如果未指定名称空间,则使用Nacos的“公共”名称空间${spring.cloud.nacos.config.namespace}。您还可以通过以下方式指定自定义名称空间:
spring.cloud.nacos.config.namespace = b3404bc0-d7dc-4855-b519-570ed34b62d7
4.3支持自定义组
{spring.cloud.nacos.config.group}未定义配置时,默认情况下使用DEFAULT_GROUP 。如果需要定义自己的组,则可以在以下属性中进行定义:
spring.cloud.nacos.config.group = DEVELOP_GROUP
4.4支持自定义数据ID
spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#1.数据ID位于DEFAULT_GROUP的默认组中,并且不支持动态刷新配置
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties
#2.数据ID不在默认组中,并且不支持动态刷新配置
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP
#3.数据ID不在默认组中,并且支持配置的动态引用。
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true
我们可以看到:
1.通过配置支持多个数据ID spring.cloud.nacos.config.ext-config[n].data-id。
2.通过配置数据ID组spring.cloud.nacos.config.ext-config[n].group。如果未指定,则使用DEFAULT_GROUP。
3.通过配置动态刷新spring.cloud.nacos.config.ext-config[n].refresh。默认情况下不支持。
当同时配置多个数据ID时,优先级由中的“ n”值定义spring.cloud.nacos.config.ext-config[n].data-id。值越大,优先级越高。
spring.cloud.nacos.config.ext-config[n].data-id必须具有文件扩展名,并且可以是属性或yaml / yml。
spring.cloud.nacos.config.file-extension对自定义数据ID文件扩展名没有任何影响。
多个配置,还可以这样
spring.cloud.nacos.config.shared-dataids = bootstrap-common.properties,all-common.properties
spring.cloud.nacos.config.refreshable-dataids = bootstrap-common.properties
spring.cloud.nacos.config.shared-dataids用于配置多个共享数据时,优先级是根据配置出现的顺序来确定的。较晚出现的优先级比最先出现的优先级高。
spring.cloud.nacos.config.refreshable-dataids指定支持动态刷新的数据ID时,数据ID的相应值还应指定文件扩展名。
4.5 Nacos Config 更多信息配置
配置 | Key | 默认值 | 描述 |
---|---|---|---|
服务器地址 | spring.cloud.nacos.config.server-addr | Nacos服务器侦听器的IP和端口 | |
Nacos配置的Dataid | spring.cloud.nacos.config.name | 首先使用前缀,然后使用名称,最后使用spring.application.name | |
编nacos配置编码 | spring.cloud.nacos.config.encode | ||
Nacos配置组 | spring.cloud.nacos.config.group | DEFAULT_GROUP | |
nacos config dataId的后缀,也是config文件扩展名。 | spring.cloud.nacos.config.fileExtension | properties | |
Nacos配置超时 | spring.cloud.nacos.config.timeout | 3000 | 从Nacos获取配置超时 |
命名空间 | spring.cloud.nacos.config.namespace | 命名空间 | |
Nacos Server的上下文路径 | spring.cloud.nacos.config.contextPath | Nacos Server的上下文路径 | |
集群名称 | spring.cloud.nacos.config.clusterName | ||
共享配置的Dataid | spring.cloud.nacos.config.sharedDataids | 共享配置的数据标识,用“,”分隔 | |
共享配置的动态刷新dataid | spring.cloud.nacos.config.refreshableDataids | 共享配置的动态刷新数据标识,用“,”分隔 | |
自定义dataid | spring.cloud.nacos.config.extConfig | 这是一个列表,由ConfigPOJO建立。Config具有3个属性dataId,group和refresh |
Nacos持久化
mysql数据库3.6.5以上
Nacos默认自带嵌入式数据库Derby
derby到mysql切换配置步骤
1./nacos/conf目录下找到sql脚本nacos-mysql.sql
2.修改conf目录下application.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/mynacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456