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添加配置文件
性能剖析、监控告警

 

posted @   陈超阿  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示