Spring Cloud Alibaba
1.入门简介
1.1 为什么会出现SpringCloud alibaba
spring cloud Netflix进入维护模式
1.2 是什么
2018.10.31, Spring cloud Alibaba正式入驻了Spring Cloud官方孵化器,并在Maven中央库发布了第一个版本.
1.3 能干嘛
服务限流降级
默认支持Servlet、Feign、RestTemplate、Dubbo和RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控
服务注册与发现
适配Spring Cloud服务注册与发现标准,默认集成了Ribbon的支持
分布式配置管理
支持分布式系统中的外部化配置,配置更改时自动刷新
消息驱动能力
基于Spring Cloud Stream为微服务应用构建消息驱动能力
阿里云存储对象
阿里云提供的海量、安全、低成本、高可靠的云存储服务.支持在任何应用、任何时间、任何地点存储和访问任意类型的数据
分布式任务调度
提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务.同时提供分布式的任务执行模型,如网格任务.网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行
1.4 怎么用
Sentinel
阿里巴巴开源产品,把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性.
Nacos
阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台.
RocketMQ
Apache RocketMQ基于Java的高性能,高吞吐量的分布式消息和流计算平台.
Dubbo
Apache Dubbo是一款高性能的Java RPC框架.
Seata
阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案.
Alibaba Cloud OSS
阿里云对象存储服务器(Object Storage Service,简称OSS),是阿里云提供的海量,安全,低成本,高可靠的云存储服务.
Alibaba Cloud Schedulerx
阿里中间件团队开发的一款分布式调度产品,支持周期性的任务与固定时间点触发任务.
2. SpringCloud Alibaba Nacos服务注册和配置中心
2.1 Nacos(Naming Configuration Service)简介
2.1.1 是什么
- 一个更易于构建云远程应用的动态服务发现,配置管理和服务管理平台
- Nacos就是注册中心 + 配置中心的组合 等价于 Nacos = Eureka + Config + Bus
2.1.2 能干嘛
- 替代Eureka做服务注册中心
- 替代Config做服务配置中心
2.1.3 注册中心比较
服务注册与发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP | 支持 | 低(2.x版本闭源) |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP/CP | 支持 | 高 |
- nacos和CAP
2.2 Nacos安装
- 本地Java8+Maven环境已经OK
- 先从官网下载Nacos
- 解压安装包,直接运行bin目录下的startup.cmd
- 运行成功后访问http://localhost:8848/nacos
- 默认账号nacos nacos
2.3 Nacos作为服务注册中心
2.3.1 pom
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>com.atguigu.springcloudgroupId>
<artifactId>cloud-api-commonsartifactId>
dependency>
dependencies>
2.3.2 yml文件
server:
port: 9001
spring:
application:
name: nacos-payment
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: '*'
2.3.3 主启动类
package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosPaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(NacosPaymentMain9001.class,args);
}
}
2.3.4 Nacos支持AP和CP两种模式的切换
-
C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应.
-
何时选择何种模式
一般来说,
如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并且能够保持心跳上报,那么就可以选择AP模式.当主流的服务如Spring Cloud 和 Dubbo 服务,都是用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下支持注册临时实例.
如果需要在服务级别编辑或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式.
CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误.
curl -X PUT ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
2.4 Nacos作为服务配置中心
2.4.1 配置中心dataID设置
文件后缀名不能写yml,要写yaml
2.4.2 pom文件
<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">
<parent>
<artifactId>cloud2020artifactId>
<groupId>com.atguigu.springcloudgroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>cloud-alibaba-nacos-config-client3377artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>