Spring Cloud Alibaba初学
spring cloud Alibaba 依赖
<properties>
<spring.boot.version>2.3.12.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.7.RELEASE</spring.cloud.alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
Sentinel 8080
D:\sentinel 下cmd java -jar sentinel-dashboard-1.8.1.jar (-Dserver.port=8888)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
配置sentinel dashboard的访问地址
spring.cloud.sentinel.transport.dashboard=localhost:8080
1.Sentinel使用Nacos存储规则
// 依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.5.2</version>
</dependency>
// 配置
spring.cloud.sentinel.datasource.ds.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds.nacos.dataId=${spring.application.name}-sentinel
spring.cloud.sentinel.datasource.ds.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow
Nacos添加限流规则的配置给Sentinel使用
[
{
"resource": "/hello", resource:资源名,即限流规则的作用对象
"limitApp": "default", limitApp:流控针对的调用来源,若为 default 则不区分调用来源
"grade": 1, grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
"count": 5, count:限流阈值
"strategy": 0, strategy:调用关系限流策略
"controlBehavior": 0, controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
"clusterMode": false clusterMode:是否为集群模式
}
]
2.Sentinel规则同步至Nacos
https://blog.didispace.com/spring-cloud-alibaba-sentinel-2-4/
https://gitee.com/mirrors/Sentinel/tree/master/sentinel-dashboard
3.@SentinelResource注解
可能需要限流的层面不仅限于接口。可能对于service某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。
①在应用主类中加注解支持的配置
@Bean
public SentinelResourceAspect sentinelResourceAspect() {
return new SentinelResourceAspect();
}
②在控制流量的地方使用@SentinelResource注解
// 例如,在service层的doSomeThing方法上
@SentinelResource(value = "doSomeThing", blockHandler = "exceptionHandler" // ,fallback = "fallbackHandler" 熔断降级处理 )
// 限流与阻塞处理,该函数的传参必须与资源点的传参一样,并且最后加上BlockException异常参数;同时,返回类型也必须一样。
public void exceptionHandler(String str, BlockException ex) {
log.error( "blockHandler:" + str, ex);
}
Nacos 8848
D:\nacos\bin 下cmd
启动命令(standalone代表着单机模式运行,非集群模式): startup.cmd -m standalone
关闭服务器 shutdown.cmd
1实现服务注册与发现
①加入了Nacos的服务注册与发现模块依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
②主类开启Spring Cloud的服务注册与发现 @EnableDiscoveryClient
③配置服务名称和Nacos地址
spring.application.name=alibaba-nacos-discovery-server server.port=8001 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
④通过spring cloud common中的LoadBalancerClient 负载均衡 接口选取服务提供节点实现接口调用
@GetMapping("/test")
public String test() {
ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
String url = serviceInstance.getUri() + "/hello?name=" + "didi";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return "Invoke : " + url + ", return : " + result;
}
2使用Nacos作为配置中心
①加入Nacos的配置客户端模块
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
②用法
@RestController
@RefreshScope // 配置内容支持动态刷新
static class TestController {
@Value("${didispace.title:}") // 注入了key为didispace.title的配置(默认为空字符串)
private String title;
@GetMapping("/test")
public String hello() {
return title;
}
}
③创建配置文件bootstrap.properties(必须这个命名),并配置服务名称和Nacos地址
spring.application.name=alibaba-nacos-config-client // 与Data Id匹配 除后缀 server.port=8001 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 /* 非默认配置管理 优先级1 spring.cloud.nacos.config.prefix=example // 与Data Id匹配 自定义配置文件名 spring.cloud.nacos.config.file-extension=yaml // 与配置格式匹配 */ /* 多环境管理 spring.profiles.active=DEV // 在application.name后+ -DEV spring.cloud.nacos.config.group=DEV_GROUP // 指定group spring.cloud.nacos.config.namespace=83eed883a // 指定namespace */ // 多文件加载与共享配置 /* 加载配置 优先级2 spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[0].refresh=true // 支持自动刷新 spring.cloud.nacos.config.ext-config[1].data-id=log.properties spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[1].refresh=true 共享配置 优先级3 ↑↓等价、区别有无group spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties */
3数据持久化(只支持mysql)————只有在集群模式下,才支持外置数据库————startup.cmd -m cluster
①导入conf/nacos-mysql.sql
②conf/application.properties添加配置
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456
RocketMQ 9980
D:\rocketmq-all-4.6.1-bin-release\bin 下cmd
启动 NameServer start mqnamesrv.cmd
启动 Broker start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true -c D:\rocketmq-all-4.6.1-bin-release\conf\broker.conf
启动console java -jar rocketmq-dashboard.jar
查看name server服务启动前后端口: netstat -nao|findstr 9876
查看连接到nameserver上的broker: mqadmin clusterList -n localhost:9876
发送消息: set NAMESRV_ADDR=localhost:9876
tools.cmd org.apache.rocketmq.example.quickstart.Producer
接收消息: tools.cmd org.apache.rocketmq.example.quickstart.Consumer
停止broker: mqshutdown.cmd broker
停止namesrv: mqshutdown.cmd namesrv
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.6.1</version>
</dependency>
Seata ????
D:\seata\bin 下cmd seata-server.bat -p 8091 -h 127.0.0.1 -m file
在主聚合微服务的业务层中注解在业务方法上,加上@GlobalTransactional注解,即可实现分布式事务。
①修改配置文件file.conf、registry.conf注册和配置均采取nacos注册中心
②配置导入nacos,方便服务拉取seata配置
新建config.txt配置文件、编写nacos-config.sh脚本
nacos中创建namespace、通过git bash将配置信息推送nacos
sh nacos-config.sh -h 127.0.0.1 -p 8848 -g seata -t b1c7bf6e-f921-4687-86f8-b8be8bcb81ac -u nacos -w nacos
③项目上编写单独的数据源代理配置DataSourcesConfig
④添加依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <!--由于默认自带的版本很低,则需要手动移除,重新导入指定版本的seata --> <exclusions> <exclusion> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
⑤配置文件
seata:
enabled: true # 1.0新特性,需要依赖seata-spring-boot-starter 默认为true
enable-auto-data-source-proxy: true # 牵扯到回滚
tx-service-group: seata_test_group # 需要与config.txt中的 service.vgroupMapping.seata_test_group=default保持一致
server:
vgroup-mapping:
seata_test_group: default # 需要与config.txt中的 service.vgroupMapping.seata_test_group=default 保持一致
#grouplist:
# default: 127.0.0.1:8091
disable-global-transaction: false
registry: ## 注册中心
type: nacos #注册nacos
nacos:
application: seata-server #nacos中seata-server启动注册成功后的服务名称
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
config: ## 配置中心 与register.conf文件中的保持一致
type: nacos
nacos:
server-addr: 127.0.0.1:8848
application: SEATA_GROUP #与register.conf文件中的保持一致
username: nacos
password: nacos
namespace: b1c7bf6e-f921-4687-86f8-b8be8bcb81ac #默认public,此处是创建的seata工作区间
client:
rm:
report-success-enable: false
https://blog.csdn.net/qq_38322527/article/details/113261284 SpringCloud Alibaba——Seata 1.3.0配置和使用
SkyWalking 8888
D:\apache-skywalking-apm-bin-es7\bin 下cmd startup.bat
每个项目的run Configurations的Environment的VM options:
-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=微服务的spring.application.name -Dskywalking.collector.backend_service=127.0.0.1:11800
持久化:1config/application.yml修改存储方式、mysql相关信息 2添加MySQL的jdbc依赖到oap-libs文件夹
日志监控:1添加日志依赖 2添加配置文件
性能剖析、监控告警

浙公网安备 33010602011771号