尚硅谷springcloud2020day17(p136-141)

今天是2020-12-21。
一。sentinel整合feign
1.pom引入openfeign的starter
2.application.yml:

 feign:
  sentinel:
   enabled:true

3.主启动类:@EnableFeignClients
4.接口PaymentService添加@FeignClients(value=“nacos-payment-provider”,fallback=paymentFallback.class)
5,创建类paymentFallback实现PaymentService,并添加@Component注解
6.创建控制器,注入PaymentService,并调用接口方法完成远程调用
二。sentinel持久化
将配置的规则持久化到nacos保存:
1.pom添加依赖:sentinel-datasource-nacos
2.application.yml:

server:
  port: 8401
spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        #nacos地址
        server-addr: xxx:8080
    sentinel:
      transport:
        #sentinel监控平台地址
        dashboard: xxx:8858
        #应用本地会启动一个httpserver与sentinel控制台交互,端口默认8719,如果被占用就+1直到找到未被占用的端口
        port: 8719
        #如果是docker启动的话,本地服务想看到实时监控要配置这个为本机ip
        clientIp: 127.0.0.1
      datasource:
        ds1:
          nacos:
            server-addr: xxx:8080
            dataId: ${spring.application.name}
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow
management:
  endpoints:
    web:
      exposure:
        include: "*"

3.nacos新建配置文件:cloudalibaba-sentinel-service,格式是json:
[
{
“resource”: “hello”,
“limitApp”: “default”,
“grade”: 1,
“count”: 1,
“strategy”: 0,
“controlBehavior”: 0,
“clusterMode”: false
}
]
点击发布即可,然后重启项目,访问/hello即可看到配置好的流控规则,且生效
4.注:不知道是不是有人和我一样,sentinel是docker装的,不是在本地。可以看到服务在sentinel界面显示了,但是监控不到本地服务的接口调用,配的规则也不生效。这次去nacos搞了持久化配置,sentinel那边也没显示出来,但是我一访问接口,规则居然生效了,搞得人无语凝噎,因为监控不到接口调用之前很多地方只能看着老师做,自己实践不了。不过这种配置文件搞起来也很麻烦,再去实践之前的也没必要了,怎么说呢,这算是把之前最简单的qps流控给实践了,也算是最后赶上了车,一切都是这么的奇妙。
二。分布式事务
分布式微服务,每个服务都会连接自己的数据库。一个请求访问,可能会涉及到多个服务调用,涉及到多个数据源,那么每个服务对自己数据库的操作就需要同步,即都在一个事务里,一个服务对数据库的操作失败,其他服务即使对数据库操作是成功的,也要回滚,这就是分布式事务。
三。docker安装seata1.2
1.docker pull seataio/seata-server:1.2.0
2.docker run -d --name seata-server -e SEATA_IP=xxx -e SEATA_PORT=8091 -p 8091:8091 seataio/seata-server:1.2.0
3.cd /usr/local
4.mkdir -p /usr/local/seata
5.docker cp seata容器id:/seata-server/resources/file.conf /usr/local/seata/file.conf #拷贝容器内文件file.conf到容器外的/usr/local/seata径下
6.docker cp seata容器id:/seata-server/resources/registry.conf /usr/local/seata/registry.conf
7.vim file.conf,修改连接模式为db,并修改数据库连接信息:

store {
  ## store mode: file、db
  mode = "db"
 
  ## file store property
  file {
    ## store location dir
    dir = "sessionStore"
    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
    maxBranchSessionSize = 16384
    # globe session size , if exceeded throws exceptions
    maxGlobalSessionSize = 512
    # file buffer size , if exceeded allocate new buffer
    fileWriteBufferCacheSize = 16384
    # when recover batch read size
    sessionReloadReadSize = 100
    # async, sync
    flushDiskMode = async
  }
 
  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.cj.jdbc.Driver"   #注意这里是mysql8的配置
    url = "jdbc:mysql://192.168.100.132:3306/seata?serverTimezone=UTC"  
    user = "root"
    password = "123456"
    minConn = 5
    maxConn = 30
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }
}

8.vim registry.conf,将seata 注册进nacos中:

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"
 
  nacos {
    application = "seata-server"
    serverAddr = "xxx"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = 0
    password = ""
    cluster = "default"
    timeout = 0
  }
  zk {
    cluster = "default"
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  consul {
    cluster = "default"
    serverAddr = "127.0.0.1:8500"
  }
  etcd3 {
    cluster = "default"
    serverAddr = "http://localhost:2379"
  }
  sofa {
    serverAddr = "127.0.0.1:9603"
    application = "default"
    region = "DEFAULT_ZONE"
    datacenter = "DefaultDataCenter"
    cluster = "default"
    group = "SEATA_GROUP"
    addressWaitTime = "3000"
  }
  file {
    name = "file.conf"
  }
}
 
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "file"
 
  nacos {
    serverAddr = "localhost"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  apollo {
    appId = "seata-server"
    apolloMeta = "http://192.168.1.204:8801"
    namespace = "application"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}

9.docker cp file.conf seata容器id:/seata-server/resources/file.conf
10.docker cp registry.conf seata容器id:/seata-server/resources/registry.conf
11.在file.conf指定的连接中创建数据库seata,并执行sql脚本,不然seata启动会失败,
官方要求的seata数据库的脚本
12.docker restart seata容器id
13.docker logs seata容器id,确保启动成功
14.登录nacos查看服务列表,看到seata-server表示配置成功
四。seata
seata是alibaba的开源分布式事务解决方案
重要概念:
1.Transaction ID XID:全局唯一的事务ID
2.Transaction Manager TM:事务管理器,定义全局事务的范围-负责开始一个全局事务、提交或回滚全局事务
3.Transaction Coordinator TC:事务协调者,维护全局或分支事务的状态,驱动全局事务提交或回滚
4.Resource Manager RM:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
五。seata的处理流程
1.TM向TC申请开启一个全局事务,并生成全局唯一的XID
2.XID在微服务调用的链路上传播
3.RM向TC注册分支事务,将其纳入XID对应全局事务的管辖。
4.TM向TC发起针对XID的全局事务的提交或回滚申请
6.TC调度XID下管辖的全部分支事务完成提交或回滚申请。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷Java视频教程_SpringCloud视频教程 本套视频从面试题,到SpringCloud各种核心组件,到最终的微服务架构总结,帮助大家快速入门、上手并精通微服务框架SpringCloud。 课程中对比了 Dubbo 和 SpringCloud,并深入讲授SpringCloud核心组件Eureka、Ribbon、Feign、Hystrix、HystrixDashboard、Zuul、Config。除此之外,还通过整合SpringMVC+SpringBoot+Mybatis构建一个可用的基于SpringCloud的微服务工程将上述技术组件逐步落地,让大家看得懂做得出学得会。 00、尚硅谷_SpringBoot_源码、课件 01.尚硅谷_SpringCloud_前提概述 02.尚硅谷_SpringCloud_大纲概览 03.尚硅谷_SpringCloud_从面试题开始 04.尚硅谷_SpringCloud_微服务是什么 05.尚硅谷_SpringCloud_微服务是什么2 06.尚硅谷_SpringCloud_微服务与微服务架构 07.尚硅谷_SpringCloud_微服务优缺点 08.尚硅谷_SpringCloud_微服务技术栈有哪些 09.尚硅谷_SpringCloud_为什么选择SpringCloud作为微服务架构 10.尚硅谷_SpringCloud_SpringCloud是什么 11.尚硅谷_SpringCloud_SpringCloud_VS_SpringBoot区别对比 12.尚硅谷_SpringCloud_SpringCloud_VS_Dubbo区别对比 13.尚硅谷_SpringCloud_SpringCloud功能域和官网资料介绍 14.尚硅谷_SpringCloud_SpringCloud国内使用情况 15.尚硅谷_SpringCloud_Rest微服务案例-总体概述 16.尚硅谷_SpringCloud_Rest微服务案例-父工程构建步骤 17.尚硅谷_SpringCloud_Rest微服务案例-API公共模块和部门Entity步骤 18.尚硅谷_SpringCloud_Rest微服务案例-部门服务提供者 19.尚硅谷_SpringCloud_Rest微服务案例-部门服务消费者 20.尚硅谷_SpringCloud_Eureka是什么 21.尚硅谷_SpringCloud_EurekaServer服务注册中心建立 22.尚硅谷_SpringCloud_将已有的部门微服务注册进Eureka服务中心 23.尚硅谷_SpringCloud_微服务完善_主机映射名称修改 24.尚硅谷_SpringCloud_微服务完善_主机IP信息提示 25.尚硅谷_SpringCloud_微服务完善_info内容构建 26.尚硅谷_SpringCloud_Eureka自我保护机制介绍 27.尚硅谷_SpringCloud_Eure服务发现 28.尚硅谷_SpringCloud_Eureka集群配置 29.尚硅谷_SpringCloud_Eureka比Zookeeper好在哪里 30.尚硅谷_SpringCloud_Ribbon是什么 31.尚硅谷_SpringCloud_Ribbon配置初步 32.尚硅谷_SpringCloud_Ribbon负载均衡 33.尚硅谷_SpringCloud_Ribbon核心组件IRule 34.尚硅谷_SpringCloud_自定义Ribbo的负载均衡策略(上) 35.尚硅谷_SpringCloud_自定义Ribbo的负载均衡策略(下) 36.尚硅谷_SpringCloud_Feign是什么 37.尚硅谷_SpringCloud_Feign工程构建 38.尚硅谷_SpringCloud_Hystrix断路器是什么 39.尚硅谷_SpringCloud_服务熔断 40.尚硅谷_SpringCloud_服务降级 41.尚硅谷_SpringCloud_服务降级熔断小总结 42.尚硅谷_SpringCloud_豪猪hystrixDashboard 43.尚硅谷_SpringCloud_如何查看hystrixDashboard 44.尚硅谷_SpringCloud_Zuul是什么 45.尚硅谷_SpringCloud_Zuul路由基本配置 46.尚硅谷_SpringCloud_Zuul路由访问映射规则 47.尚硅谷_SpringCloud_Config分布式配置中心是什么 48.尚硅谷_SpringCloud_Config服务端与Github通信 49.尚硅谷_SpringCloud_Config客户端通过Config服务端获得Github上的配置 50.尚硅谷_SpringCloud_Config
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值