Springcloud Alibaba学习入门示例

  • ​​一、初始项目​​
  • ​​1.1、Spring Initializr 项目​​
  • ​​1.2、完善 pom.xml(引入alibaba的依赖)​​
  • ​​1.3、下载 sentinel 项目​​
  • ​​1.4、下载和配置 Nacos 项目​​
  • ​​二、启动 sentinel 和 Nacos​​
  • ​​2.1、启动 sentinel​​
  • ​​2.2、启动 Nacos​​
  • ​​三、在初始化项目中,配置 Sentinel 、 Nacos​​
  • ​​3.1、项目的基本目录结构​​
  • ​​3.2、代码示例​​
  • ​​3.2.1、配置信息(两个)​​
  • ​​3.2.2、java code(5部分)​​
  • ​​四、运行项目​​
  • ​​4.1、Sentinel 控制台​​
  • ​​4.2、Nacos分布式配置管理​​


写在前面,建议在进行下面的步骤前,

​​先了解下整个alibaba cloud的基本名词,可参考上文​​。

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

Springcloud Alibaba学习入门示例_java

一、初始项目

1.1、Spring Initializr 项目

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

Springcloud Alibaba学习入门示例_spring_02


解压导入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

Springcloud Alibaba学习入门示例_spring_03


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

Springcloud Alibaba学习入门示例_java_04

2.2、启动 Nacos

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

Springcloud Alibaba学习入门示例_spring_05


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

也是一个web页面

默认密码 nacos,密码 nacos

Springcloud Alibaba学习入门示例_java_06


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

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

3.1、项目的基本目录结构

Springcloud Alibaba学习入门示例_spring_07

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中已经发现,注册了我们刚刚启动的项目

Springcloud Alibaba学习入门示例_java_08

4.2、Nacos分布式配置管理

Springcloud Alibaba学习入门示例_分布式配置_09


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

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