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

 

posted @ 2022-04-21 17:35  陈超阿  阅读(80)  评论(0)    收藏  举报