写在前面,建议在进行下面的步骤前, 先了解下整个alibaba cloud的基本名词,可参考上文

下面是阿里团队集成Spring开发的相关微服务的组件

一、初始项目

1.1、Spring Initializr 项目

初始化Maven项目,Spring Initializr 有很方便的Spring的依赖引入
只需引入这三个依赖即可,关于Alibaba cloud的依赖,spring暂未引入,需要手动去加入依赖,点击此处,跳转Spring Initializr


解压导入IDEA

1.2、完善 pom.xml(引入alibaba的依赖)

在spring Initializr自动构建的Pom中添加如下的依赖

     <!--添加SCA-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--<dependency>-->
        <!--<groupId>com.alibaba.cloud</groupId>-->
        <!--<artifactId>spring-cloud-starter-alicloud-acm</artifactId>-->
        <!--</dependency>-->
        <!--<dependency>-->
        <!--<groupId>com.alibaba.cloud</groupId>-->
        <!--<artifactId>spring-cloud-starter-alicloud-oss</artifactId>-->
        <!--</dependency>-->
        <!--添加SCAC-->
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <!--添加阿里 cloud 依赖管理-->
            <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>

1.3、下载 sentinel 项目

只有一个jar
点击此处下载,sentinel-dashboard-1.6.3.jar版本

1.4、下载和配置 Nacos 项目

注意系统的区别(linux,windows,MAC)
点击此处下载,下载 acos-server-1.1.4.zip版本

二、启动 sentinel 和 Nacos

2.1、启动 sentinel

指定端口8888,启动

java -jar -Dserver.port=8888 sentinel-dashboard.jar


访问 localhost:8888,默认账号密码是:sentinel/sentinel

2.2、启动 Nacos

,解压,运行脚本即可,在 bin下,自带的启动脚本


默认端口,8848,访问 localhost:8848/nacos

也是一个web页面

默认密码 nacos,密码 nacos


可以看到 Sentinel 和Nacos里面都是空的。

三、在初始化项目中,配置 Sentinel 、 Nacos

3.1、项目的基本目录结构

3.2、代码示例

3.2.1、配置信息(两个)

bootstrap.properties

spring.application.name=bootiful-alibaba

# sentinel
spring.cloud.sentinel.transport.dashboard=localhost:8888

# nacos
nacos=localhost:8848
spring.cloud.nacos.discovery.server-addr=${nacos}
spring.cloud.nacos.config.server-addr=${nacos}

application.properties

spring.cloud.sentinel.servlet.block-page=/error

3.2.2、java code(5部分)

程序入口,BootifulApplication

@EnableDiscoveryClient
@SpringBootApplication
public class BootifulApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(BootifulApplication.class, args);
    }
}
```x
SentinelConfig,流量配置
```java
@Configuration
public class SentinelConfig {
   

    @EventListener(ApplicationReadyEvent.class)
    public void config() {
   
        FlowRule fr = new FlowRule();
        fr.setRefResource("/code");
        fr.setCount(2);
        fr.setGrade(RuleConstant.FLOW_GRADE_QPS);
        fr.setLimitApp("default");

        FlowRuleManager.loadRules(Collections.singletonList(fr));
    }
}

CustomerUrlHandler,阻塞异常处理

@Log4j2
@Component
public class CustomerUrlHandler implements UrlBlockHandler {
   

    @Override
    public void blocked(HttpServletRequest req, HttpServletResponse res, BlockException e) throws IOException {
   

        res.getWriter().append(">_<");
    }
}

TestController,测试接口

@RestController
public class TestController {
   
    @GetMapping("/code")
    public String code(){
   
        return "Hello Code" ;
    }

    @GetMapping("/dashboard")
    public String dashboard(){
   
        return "Hello Dashboard";
    }

    @GetMapping("/error")
    public ResponseEntity<?> error(){
   
        return ResponseEntity
                .status(HttpStatus.TOO_MANY_REQUESTS)
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .body(Collections.singletonMap("error","could't take it anymore!"));
    }


}

DiscoveryClientListener ,服务发现

@Log4j2
@Component
public class DiscoveryClientListener {
   

    private final DiscoveryClient discoveryClient;

    public DiscoveryClientListener(DiscoveryClient discoveryClient) {
   
        this.discoveryClient = discoveryClient;
    }

    @EventListener(ApplicationReadyEvent.class)
    public void useDiscoveryClient() {
   
        this.discoveryClient
                .getServices()
                .forEach(log::info);
    }
}

四、运行项目

确保之前的Sentinel和Nacos已经启动,然后启动我们初始化的项目(按照第三步的代码)
默认端口 8080,访问 localhost:8080/code,或者localhost:8080/dashboard

4.1、Sentinel 控制台

当再次去查看Sentinel和Nacos时,Sentinel中已经发现,注册了我们刚刚启动的项目

4.2、Nacos分布式配置管理


Nacos本身是基于 Apache Derby 一个轻量级的数据库存储,实现了90%的Mysql的功能,另外的10%可能是一些内部函数的封装,连接、平台、实现语言不同(Derby基于JVM就可使用)等等,对于基本的存储和Mysql几乎一致。

还有Nacos,是阿里团队开发的分布式配置管理,类似的,携程团队也开发了一套分布式配置管理的系统Apollo