Springcloud Alibaba学习入门示例
写在前面,建议在进行下面的步骤前, 先了解下整个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