SpringCloudAlibaba入门到精通|sentinel,Seata,Gateway,SkyWalking

1 创建项目

1 创建父maven项目,并且加上pom标签,打包方式改为pom

pom
创建子模块在这里插入图片描述

springcloud alibaba的版本说明,springcloud-springcloud alibaba-springboot之间的版本关系
最好是版本一一对应,要不然会出现bug
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

在这里插入图片描述

springcloud alibaba 的版本,他也会自动管理分布式组件的版本,引入分布式组件的时候就不需要再加版本了

我的pom示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

<!--    这里的的parent 可以继承自己公司的父级jar包-->
<!--    <parent>-->
<!--        <groupId>org.springframework.boot</groupId>-->
<!--        <artifactId>spring-boot-starter-parent</artifactId>-->
<!--        <version>2.7.7</version>-->
<!--        <relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
<!--    </parent>-->
    <groupId>com.pan.demo</groupId>
    <artifactId>spring-cloud-alibaba-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-alibaba-demo</name>
    <description>Demo project for Spring Boot</description>
    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
        <alibaba-cloud.version>2.2.8.RELEASE</alibaba-cloud.version>
    </properties>


<!--    这个地方只是用来版本管理的,子项目,引用依赖就不用声明版本号了-->
<!--type pom 和scope import的意思就是maven新版本的特性,必须这样写-->


    <dependencyManagement>
        <dependencies>
<!--            强制规定springcloud版本-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!--            强制规定springcloud alibaba版本-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!--            强制规定springboot的版本-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

   <modules>
       <module>order</module>
       <module>user</module>
   </modules>



</project>

2 nacos 注册中心和配置中心

nacos注册中心的核心功能
在这里插入图片描述

windows 部署
nacos 的安装包必须与spring alibaba 的版本相对应
如果不翻墙下载的会很慢
1 下载:https://github.com/alibaba/nacos/releases
2 修改bin目录下面的 startup.cmd
把启动方式改成单例模式,数据是放进内存的
set MODE=“standalone”
双击startup.cmd。即可启动
http://localhost:8848/nacos/index.html

1 引入依赖

		<!--SpringCloud ailibaba nacos 服务注册与发现模块 -->
<!--		不需要版本号,因为父pom已经管理了springcolud alibaba的版本-->
	<dependency>
		<groupId>com.alibaba.cloud</groupId>
		<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	</dependency>
	<!--naocs Config 配置中心依赖-->
	<dependency>
		<groupId>com.alibaba.cloud</groupId>
		<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	</dependency>

2 把配置文件换成 bootstrap.yml

server:
  port: 8081
#  port: ${random.int[10000,12000]}

spring:
  application:
    name: order #nacos 会自动获取项目名的配置文件
  main.allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848/
        namespace: d96db1f3-557b-45ee-8dbc-4ef36ad2d3a0
      config:
        group: test
        file-extension: yml
        namespace: ${spring.cloud.nacos.discovery.namespace}
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        shared-configs:       #一个项目加载多个配置文件,一般都是加载公共配置
          - dataId: common.yml
            refresh: true
            group: test
#          - dataId: @parent.artifactId@.${spring.cloud.nacos.config.file-extension}
#            group: hare
#            refresh: true


  # 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出
  # logging.level=debug这样配置是对所有的日志级别进行配置
  # 该场景只需要对feign接口进行debug配置,所以是这样配置logging.level.com.pan.demo.order.fegin=debug
logging:
  level:
    com.pan.demo.order.fegin: debug

3 openfeign 远程调用

1 引入依赖

		<!--openfeign 配置-->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

2 启动类加上注解 @EnableFeignClients
3封装方法
//value 就是服务名字 contextId是区分openfengin的,一个服务可以使用用多个实体类封装

//value 就是服务名字  contextId是区分openfengin的,一个服务可以使用用多个实体类封装
@FeignClient(value = "user", contextId = "contract")
public interface UserApi {

    @GetMapping("/test2")
    public String test1();
}

4feign日志记录
日志等级有4种,分别是:
NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。
BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间。
HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据。

加上配置类

/**
 * 全局配置:当使用@Configuration会将配置作用所有的服务提供方
 * 局部配置:如果只想针对某一个服务进行配置,就不要加@Configuration
 */
@Configuration
public class FeignConfig {

    //feign日志级别
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.BASIC;
    }

    //设置openfeign 的超时时间
    @Bean
    public Request.Options options(){
        //1 连接时间       2 接口超时时间
        return new Request.Options(5000,1000);
    }
}

配置文件也改一下日志的输出级别

# 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出
  # logging.level=debug这样配置是对所有的日志级别进行配置
  # 该场景只需要对feign接口进行debug配置,所以是这样配置logging.level.com.pan.demo.order.fegin=debug
logging:
  level:
    com.pan.demo.order.fegin: debug

4 sentinel

服务雪崩
因为服务的提供者挂掉不可用,导致服务调用者的线程无响应,服务调用者线程卡主,线程过多,cpu飙升,导致整条链路都挂掉。最后因为一个点,整个服务挂掉。
解决的方案:
1 设置超时机制:让服务调用者不再等待
2 服务限流
假如一个服务,通过压测得知的qps(每秒的并发访问量) 是500,突然某一时刻的qps达到了800,我们可以限流,将300的请求服务降级,全部拒绝掉

sentinel 控制台下载地址
https://github.com/alibaba/Sentinel/releases

sentinel整合springcloud alibaba

引入依赖
<!--sentinel配置-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2023.02.01
学习这个对于目前的我性价比不高,先缓一下在学习

5 seatat 学习

1 seata的安装包下载地址
https://github.com/seata/seata/releases

创建seata服务端

seata下载好之后,选择seata 的store模式 config/application.yml
file 单机版使用
db 使用数据库模式 数据库的版本必须是5.7以上的版本
redis 使用redis模式,但是会出现风险,数据会丢失

2 在seata下载安装包 ,打开config选择存储的模式 config/application.yml
store–》mode—》db
3 修改数据库连接
4 创建数据库,创建表

seata 的sql下载
https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html
在这里插入图片描述

选择资源目录server下面的db
选择对应的版本复制sql即可
5 在seata下载安装包 ,打开config文件夹下面的 config/application.yml 选择注册中心
registry–》type 改成nacos,并且修改地址
6 在seata下载安装包 ,script\config-center\config.txt
修改mode。修改数据库地址
– 也可以修改事务分组 service.vgroupMapping.default_tx_group=default
增加容灾机制,高可用
7 点击seata\script\config-center\nacos下面的 nacos-config.sh
将seata的配置发送到本地的nacos,也可以执行-p -h指定端口,和ip
8 启动seata
双击bin/seata-server.bat 启动seata,查看nacos服务列表即可

创建seata客户端

1 加入依赖

<!--MySQL驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.43</version>
		</dependency>
		<!--mybatis-plus启动器-->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.0.5</version>
		</dependency>

		<!--Mybatis plus 插件-->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-extension</artifactId>
			<version>3.4.1</version>
		</dependency>


		<!--	seata	-->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
		</dependency>

2 增加yml配置

seata:
  registry:  #seata注册方式nacos
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP            # seata在nacos的分组
      application: seata-server      #seata在nacos的服务名字
  config:     #seata的配置中心(在nacos配置中心里面有配置文件,服务端和客户端都会使用这个】)
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP            # seata在nacos的分组

3 在启动类加上事务注解,并且接口方法上面加分布式事务注解
@EnableTransactionManagement 事务开关
@GlobalTransactional 分布式事务开关

4 在数据库加上seata的undo表
https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html
选择资源目录,进入之后
script/client/at/db/
找到下面的 mysql脚本,把每一个使用seata的服务都加上 undo_log表

5 启动代码就可以使用啦

遇到的坑:
seatacan not get cluster name in registry config ‘service.vgroupMapping.default_tx_group’, please make sure registry config correct
这个问题的解决思路
https://seata.io/zh-cn/docs/user/txgroup/transaction-group.html
大体意思就是,seata的服务端有一个配置是集群的名称
将配置导入nacos后,nacos里面也有一个配置:
service.vgroupMapping.default_tx_group = default
这个意思就是 分组default_tx_group用的seata事务分组名字是default

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值