美文网首页
springcloud alibaba家族-个人学习笔记

springcloud alibaba家族-个人学习笔记

作者: Butif_D | 来源:发表于2022-02-21 13:59 被阅读0次

https://github.com/alibaba

Nacos 服务注册&配置中心

简介
单机版修改:
Naming、configuration、service
服务注册&配置中心
Nacos = Eureka+config+Bus
安装

https://github.com/alibaba/nacos/releases

启动失败:
把set MODE = "cluster" 修改为以下内容(默认集群启动,修改为单机启动)
rem set MODE="cluster"
set MODE="standalone"
或者启动命令:
./startup.sh -m standalone 

1. 服务注册中心

1.1 作为 服务提供者 配置示例
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #nacos 地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

主启动类注解: @EnableDiscoveryClient

1.2 作为 服务消费者 配置示例
<!--nacos-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #nacos 地址

主启动类注解: @EnableDiscoveryClient

@Configuration
public class ApplicationConfig {
    /**
     * @LoadBalanced 使用ribbon + RestTemplate 需加上
     */
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}
Nacos和CAP
支持CP和AP切换
image.png

2. 服务配置中心

2.1 基础配置
配置文件名称规则:
${spring.application.name}-${spring.profile.cative}.${spring.cloud.nacos.config.file-extension}
<dependency>  
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!--新版本的需要加上bootstrap依赖才能识别bootstrap.yml-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

bootstrap.yml
远程配置文件信息必须配置在bootstrap中,因为bootstrap优先级更高,在application中将读取不到

server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      #  远程配置文件必须配置在bootstrap中,在application中将读取不到
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        # 分组
        group: MY_GROUP
        # 命名空间
        namespace: 4856b1a1-3eec-4bb2-ac6c-920dcf5995ef

application.yml

spring:
  profiles:
    #  nacos 中表示的是 dataID
    active: dev
@RefreshScope 业务类添加注解表示动态刷新
2.2 分类管理

上面的 分组 : (group);dataID:(active: dev)

2.3 命名空间

上面的 命名空间:(namespace)

image.png

3. 集群持久化配置

3.1 集群

3.1.1 docker 搭建nacos集群

1. 拉去镜像
    git clone https://github.com/nacos-group/nacos-docker.git
2. 修改mysql配置脚本
    vim $PWD/nacos-docker/env/mysql.env
    ----------------------------------------------------
    MYSQL_ROOT_PASSWORD=root   #  数据库登录密码
    MYSQL_DATABASE=nacos_config  # 数据库名称
    MYSQL_USER=nacos                      # nacos登录用户名
     MYSQL_PASSWORD=nacos           # nacos登录用户密码             
    ----------------------------------------------------
3. 修改nacos服务配置脚本
    vim $PWD/nacos-docker/env/nacos-ip.env 
    ----------------------------------------------------
    NACOS_SERVERS=172.16.238.10:8848 172.16.238.11:8848 172.16.238.12:8848
    MYSQL_SERVICE_HOST=mysql                          # mysql 主节点
    MYSQL_SERVICE_DB_NAME=nacos_config       # 同上
    MYSQL_SERVICE_PORT=3306
    MYSQL_SERVICE_USER=nacos
    MYSQL_SERVICE_PASSWORD=nacos
    ----------------------------------------------------
4. 修改docker-compose 脚本
    vim $PWD/nacos-docker/example/cluster-ip.yaml
--------------------------------------------------------
version: "2"
services:
  nacos1:
    # 修改版本号 https://hub.docker.com/search 查询
    image: nacos/nacos-server:latest
    container_name: nacos1
    networks:
      nacos_net:
        ipv4_address: 172.16.238.10
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    env_file:
      - ../env/nacos-ip.env
    restart: on-failure
    depends_on:
      - mysql
  mysql:
    container_name: mysql
    # 修改版本号 https://hub.docker.com/search 查询
    image: nacos/nacos-mysql:8.0.16
    networks:
      nacos_net:
        ipv4_address: 172.16.238.13
    env_file:
      - ../env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"
networks:
  nacos_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.238.0/24
--------------------------------------------------------   
5. docker-compose -f example/cluster-ip.yaml up 

配置说明:
https://github.com/nacos-group/nacos-docker/wiki/%E7%A7%BB%E9%99%A4%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%BB%E4%BB%8E%E9%95%9C%E5%83%8F%E9%85%8D%E7%BD%AE

image.png

Sentinel 熔断&限流

下载: https://github.com/alibaba/Sentinel/releases
文档: https://sentinelguard.io/zh-cn/docs/introduction.html
        <!--sentinel 持久化-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        
        <!--sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

1. 流控规则

image.png

QPS : 每秒请求数

2. 熔断规则

image.png

3. 热点规则

image.png
@SentinelResource(value = "唯一资源名(下图)", blockHandler = "触发限流处理方法名")
image.png

系统规则

最外层系统级规则


image.png image.png

@SentinelResource 哨兵

官方文档: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
参数说明: https://sentinelguard.io/zh-cn/docs/annotation-support.html

image.png
案例: blockHandlerClass 全局自定义处理类
image.png
fallback         管理运行时异常
blockHandler     管理配置违规
同时存在时,blockHandler 响应优先级更高

持久化规则

<dependency>
  <groupId>com.alibaba.csp</groupId>
  <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

yml:


image.png

配置内容:

resource        资源名称
limit           来源应用
grade           阈值类型 0: 线程数   1: QPS
count           单机阈值
strategy        流控模式 0 表示直接, 1 表示关联,2 表示链路
contorlBehavior 流控效果 0 快速失败, 1 Warm Up, 2 排队等待
clusterMode     是否集群

Seata 分布式事务

官网:https://seata.io/zh-cn/

分布式事务处理ID + 三组件模型:

XID 全局事务唯一ID

1. TC Transaction Coordinator - 事务协调者
    维护全局和分支事务的状态,驱动全局事务提交或回滚
2. TM Transaction Manager - 事务管理者
    定义全局事务的范围,开始全局事务,提交或回滚全局事务
3. RM ResourceManager - 资源管理器
    管理分支事务处理的资源, 于CT交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交和回滚
image.png
本地:@transactional
全局:@GlobalTransactional(name = "唯一")

相关文章

网友评论

      本文标题:springcloud alibaba家族-个人学习笔记

      本文链接:https://www.haomeiwen.com/subject/bpjplrtx.html