Spring Cloud Alibaba初学
spring cloud Alibaba 依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <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)
1 2 3 4 | <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> |
配置sentinel dashboard的访问地址
1 | spring.cloud.sentinel.transport.dashboard=localhost:8080 |
1.Sentinel使用Nacos存储规则
1 2 3 4 5 6 7 8 9 10 11 12 | // 依赖 <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使用
1 2 3 4 5 6 7 8 9 10 11 | [ { "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某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。
①在应用主类中加注解支持的配置
1 2 3 4 | @Bean public SentinelResourceAspect sentinelResourceAspect() { return new SentinelResourceAspect(); } |
②在控制流量的地方使用@SentinelResource
注解
1 2 | // 例如,在service层的doSomeThing方法上 @SentinelResource(value = "doSomeThing" , blockHandler = "exceptionHandler" // ,fallback = "fallbackHandler" 熔断降级处理 )<br> // 限流与阻塞处理,该函数的传参必须与资源点的传参一样,并且最后加上BlockException异常参数;同时,返回类型也必须一样。<br> public void exceptionHandler(String str, BlockException ex) {<br> log.error( "blockHandler:" + str, ex);<br> } |
Nacos 8848
D:\nacos\bin 下cmd
启动命令(standalone代表着单机模式运行,非集群模式): startup.cmd -m standalone
关闭服务器 shutdown.cmd
1实现服务注册与发现
①加入了Nacos的服务注册与发现模块依赖
1 2 3 4 | <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> |
②主类开启Spring Cloud的服务注册与发现 @EnableDiscoveryClient
③配置服务名称和Nacos地址
1 2 3 | 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 负载均衡 接口选取服务提供节点实现接口调用
1 2 3 4 5 6 7 8 | @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的配置客户端模块
1 2 3 4 | <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> |
②用法
1 2 3 4 5 6 7 8 9 10 | @RestController @RefreshScope // 配置内容支持动态刷新 static class TestController { @Value( "${didispace.title:}" ) // 注入了key为didispace.title的配置(默认为空字符串) private String title; @GetMapping( "/test" ) public String hello() { return title; } } |
③创建配置文件bootstrap.properties(必须这个命名),并配置服务名称和Nacos地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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添加配置
1 2 3 4 5 | 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
1 2 3 4 5 | <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
④添加依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <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> |
⑤配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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:
1 2 3 | -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添加配置文件
性能剖析、监控告警
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具