SpringCloud
Ezerbel
这个作者很懒,什么都没留下…
展开
-
SpringCloud学习-part67 seata 之AT模式原理
Seata中的三角色第一阶段加载1.解析SQL语义,找到“业务SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”2.执行“业务SQL”,更新业务数据3.在业务数据更新之后将其保存成“after image”,最后生成行锁以上操作全部在一个数据库事务内完成,这样就保证了一阶段操作的原子性。二阶段提交因为业务SQL在一阶段已经提交到数据库,所以二阶段如果顺利提交的话,Seata框架只需将一阶段保存的快照数据和行锁删除掉,完成数据清理即可。二阶段回滚二阶段原创 2020-08-15 22:21:00 · 104 阅读 · 0 评论 -
SpringCloud学习-part66 SpringCloud结合Seata并验证回滚分布式事务
准备数据库t_accountt_ordert_storageundo_logsgithub地址:https://github.com/seata/seata/blob/1.2.0/script/client/at/db/mysql.sql -- for AT mode you must to init this sql for you business database. the seata server not need it.CREATE TABLE IF NOT EXISTS原创 2020-08-15 17:47:22 · 378 阅读 · 0 评论 -
SpringCloud学习-part65 Seata服务端准备
官网http://seata.io/zh-cn/docs/ops/deploy-guide-beginner.htmlgithub 下载Server修改registrynacos的用户名与密码可以按需修改,namepsace ="" 将被默认为public# seata服务注册中心registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "nacos" nacos { application原创 2020-08-15 17:01:55 · 132 阅读 · 0 评论 -
SpringCloud学习-part64 Seata术语
一加三模式全局唯一的事务ID+3个组件TransactionID XID全局唯一的事务IDTCtransaction coordinator事务协调器维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。TMtransaction manager事务管理器控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。RMresource manager资源管理器控制分支事务,负责分支注册、状态汇报,并接受事务协调器的指令,驱动分支(本地)事务提交或回滚。原创 2020-08-12 21:44:51 · 174 阅读 · 0 评论 -
SpringCloud学习-part63 sentinel持久化规则
[ { "resource": "/rateLimit/byUrl", "limitApp": "default", "grade": 1, "count": 1, "strategy": 0, "controlBehavior": 0, "clusterMode": false }]注释resource:资源名称;limitApp:来源应用;grade:阈值类型,0.原创 2020-08-12 20:47:23 · 176 阅读 · 0 评论 -
SpringCloud学习-part62 sentinel服务熔断与OpenFeign
目标使用OpenFeign结合与精简restTemplate与负载均衡步骤,降低代码的耦合度。文件结构pom注意引入openfeign的启动依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId>原创 2020-08-12 18:23:16 · 283 阅读 · 0 评论 -
SpringCloud学习-part61 sentinel服务熔断与fallback
消费者文件结构消费者controller@RestController@Slf4jpublic class CircleBreakerController { @Value("${service-url.nacos-user-service}") private String SERVICE_URL ; @Resource private RestTemplate restTemplate; @RequestMapping("/consumer/fal原创 2020-08-12 14:27:32 · 313 阅读 · 0 评论 -
SpringCloud学习-part60 sentinel之SentinelResource配置
Controller增加代码 @GetMapping("/rateLimit/customBlockHandler") @SentinelResource(value="customBlockHandler", blockHandlerClass = CustomBlockHandler.class, blockHandler = "handlerException2") public CommonResult byUrl(){ return new CommonR原创 2020-08-11 16:05:08 · 161 阅读 · 0 评论 -
SpringCloud学习-part59 sentinel系统规则
概述系统保护规则是从应用级别的入口流量进行控制,从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。Load 自适应(仅对 Linux/Unix-like 机器生效)系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考原创 2020-08-11 15:03:06 · 158 阅读 · 0 评论 -
SpringCloud学习-part58 sentinel热点Key
Controller中添加如下 @GetMapping("/testHotkey") @SentinelResource(value="testHotkey",blockHandler = "handleHotkeyEx") public String testHotKey(@RequestParam(value = "p1",required = false)String p1, @RequestParam(value =原创 2020-08-11 14:45:56 · 115 阅读 · 0 评论 -
SpringCloud学习-part57 sentinel熔断降级策略
平均响应时间:当1s内持续进入N个请求,对应时刻的平均响应时间(秒级)均超过阈值(以ms为单位),那么在接下的窗口期内,对这个方法的调用都会自动地熔断(抛出DegradeException)。注意:Sentinel默认统计的RT上限时4900ms,超出此阈值都会算作4900ms,若需要变更此上限可以通过启动配置项 -Dscp.sentinel.statistic.max.rt=xxx来配置。异常比例:当资源的每秒请求量>=N(可配置,默认5),[并且],每秒异常总数占通过量的比值超过阈值之后原创 2020-08-11 12:00:36 · 263 阅读 · 0 评论 -
SpringCloud学习-part56 sentinel流控效果之排队
流控规则让请求以均匀的速度通过,阈值类型必须设置成QPS,否则无效!规则编辑测试始终处理速度为1原创 2020-08-10 19:54:19 · 196 阅读 · 0 评论 -
SpringCloud学习-part55 sentinel流控效果之Warmup
流控规则默认coldFactor为3,即请求QPS从(threshold/3)开始,经多少预热时长才逐渐升至设定的QPS阈值。实测原创 2020-08-10 19:27:55 · 551 阅读 · 0 评论 -
SpringCloud学习-part54 sentinel流控之链路
定义链路流控模式指的是,当从某个接口过来的资源达到限流条件时,开启限流。它的功能有点类似于针对来源配置项,区别在于:针对来源是针对上级微服务,而链路流控是针对上级接口,也就是说它的粒度更细。测试用service@Servicepublic class OrderServiceImpl implements OrderService { @Override @SentinelResource(value="getOrder",blockHandler = "handleExceptio原创 2020-08-10 18:32:45 · 2799 阅读 · 5 评论 -
SpringCloud学习-part53 sentinel流控之关联
建立关联式流控规则使用PostMan辅助测试新建一个请求,测试通过后将其保存到Collection中设置collection内请求的运行间隔和迭代次数测试让postman跑起来,同时访问testA,A被成功限制原创 2020-08-10 16:06:31 · 173 阅读 · 0 评论 -
SpringCloud学习-part52 sentinel流控线程数快速失败
使用线程数作为阈值检查项更改Controller@RestControllerpublic class FlowLimitController { @GetMapping("/testA") public String testA(){ try { TimeUnit.MILLISECONDS.sleep(1000); } catch (InterruptedException e)原创 2020-08-10 15:40:43 · 172 阅读 · 0 评论 -
SpringCloud学习-part51 sentinel流控QPS快速失败
流控规则:直接快速失败系统默认使用该规则测试当请求超过1秒1次时,会被立刻拒绝,直到后面QPS低于阈值原创 2020-08-10 15:17:12 · 296 阅读 · 0 评论 -
SpringCloud学习-part50 sentinel初始化监控
懒加载机制,开始时没有任何实例问微服务访问微服务后原创 2020-08-10 13:56:01 · 110 阅读 · 0 评论 -
SpringCloud学习-part49 sentinel安装运行
做什么集容错、限流、监控等功能于一体的监控平台下载jar包sentinel-dashboard-1.7.2.jar运行jar包java -jar sentinel-dashboard-1.7.2.jar访问后端默认用户名密码均为sentinel原创 2020-08-10 10:42:02 · 89 阅读 · 0 评论 -
SpringCloud学习-part48 nacos 集群配置
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2020-08-10 09:12:14 · 121 阅读 · 0 评论 -
SpringCloud学习-part47 nacos 配置中心使用Group以及Namespace
使用group添加两组方案,分别位于不同groupbootstrap.yml 添加 group: group名application.yml指定统一的环境名重启测试使用命名空间新建命名空间新建配置bootstrap.yml 添加namespaceserver: port: 3377spring: application: name: nacos-config-client cloud: nacos: discovery:原创 2020-08-06 10:05:14 · 1590 阅读 · 0 评论 -
SpringCloud学习-part46 nacos配置中心使用
ConfigClient文件结构pom <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency>原创 2020-08-06 09:08:35 · 135 阅读 · 0 评论 -
SpringCloud学习-part45 提供注册者与负载均衡测试
服务提供者文件结构pom <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>ymlserver: port: 9011spring: application:原创 2020-08-05 17:22:41 · 136 阅读 · 0 评论 -
SpringCloud学习-part44 nacos 服务中心的启动
cmd窗口中启动startup默认后台地址http://localhost:8848/nacos用户名、密码都是nacos原创 2020-08-05 17:10:02 · 122 阅读 · 0 评论 -
SpringCloud学习-part43 Sleuth与zipkin链路监控
参考服务跟踪原理分布式系统的服务跟踪主要包括下面两个关键点:1.为了实现请求跟踪,当请求发送到分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识Trace ID,同时在分布式系统内部流转的时候,框架失踪保持该唯一标识,直到返回给请求方位置。服务追踪的追踪单元是从客户发起请求(request)抵达被追踪系统的边界开始,到被追踪系统向客户返回响应(response)为止的过程,称为一个“trace”。2.为了统计各处理单元的时间延迟,当请求到达各个服务组件时,也是通过一个唯一标原创 2020-08-03 11:23:28 · 113 阅读 · 0 评论 -
SpringCloud学习-part42消息的重复消费与持久化
消息重复消费场景如何解决如果同一个订单同时被两个服务获取,那么就会造成数据错误,为了避免这种情况。可以使用Stream中的消息分组来解决。在Stream中,处于同一个group中的多个消费者是竞争关系,就能保证消息智慧被其中一个应用消费一次。不同的组可以全面的消费(重复消费)。修改ymlspring: application: name: cloud-stream-consumer cloud: stream: binders: #此处配置需要绑定的rab原创 2020-07-29 13:33:53 · 164 阅读 · 0 评论 -
SpringCloud学习-part41消息驱动の生产者与消费者
基本概念图生产者文件结构MessageProvider/** * @Author: EzerbelCN * @Date: 2020/7/29 9:04 *///@Service@EnableBinding(Source.class)@Slf4jpublic class MessageProvider implements IMessageProvider { /** * 消息发送管道 */ @Resource private Messa原创 2020-07-29 12:36:35 · 160 阅读 · 0 评论 -
SpringCloud学习-part40 Bus之动态刷新全局广播+定点通知
添加新的客户端文件结构boostrap.yml一定一定千万注意,yml的层级关系!可以Ctrl+左键排查属性是否正确server: port: 3366spring: application: name: config-client cloud: #Config客户端配置 config: label: master # 分支名称 name: config #配置文件名称 profile: dev # 读取后缀名称(如前面原创 2020-07-28 21:13:49 · 180 阅读 · 0 评论 -
SpringCloud学习-part39 Bus之RabbitMQ环境搭建
什么是总线在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统汇总的所有微服务 实例都连接上来。由于该主题中产生的消息总会被所有实例监听和消费,所以称它们为消息总线。在总线上的各个实例,都可以方便的广播一些,需要让其他连接在该主题上的实例都知道的消息。基本原理ConfigClient实例都监听MQ中的一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个消息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置原创 2020-07-28 20:56:28 · 147 阅读 · 0 评论 -
SpringCloud学习-part38 配置中心之客户端与动态刷新
文件结构bootstrapserver: port: 3355spring: application: name: config-client cloud: #Config客户端配置 config: label: master # 分支名称 name: config #配置文件名称 profile: dev # 读取后缀名称(如前面:master分支上config-dev.yml的配置文件) uri: http:/原创 2020-07-27 19:56:36 · 87 阅读 · 0 评论 -
SpringCloud学习-part37配置中心搭建
配置中心服务端文件结构yml注意这里的uri格式如果是public 的仓库是不需要用户名密码的server: port: 3344spring: application: name: cloud-config-center cloud: config: server: git: uri: https://github.com/EzerbelCN/springcloud-config #github上仓库的名字原创 2020-07-27 19:51:10 · 87 阅读 · 0 评论 -
SpringCloud学习-part36 Gateway自定义Filter
文件结构Filter/** * @Author: EzerbelCN * @Date: 2020/7/24 16:25 */@Configuration@Slf4jpublic class MyLogGateWayFilter implements GlobalFilter, Ordered { @Override//Mono 类似于ModelAndView public Mono<Void> filter(ServerWebExchange exchange,原创 2020-07-24 16:43:38 · 109 阅读 · 0 评论 -
SpringCloud学习-part35 Gateway常用Predicate
RoutePredicate路径级别必须匹配该路径才能路由- Path=/payment/lb/**时间级别After Route Predicatespring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名进行路由 routes:原创 2020-07-24 16:13:23 · 297 阅读 · 0 评论 -
SpringCloud学习-part34 Gateway配置动态路由
基本原理默认情况下Gateway会根据中策中心注册的服务列表,以注册中心上的微服务名为路径创建动态路由进行转发,从而实现动态路由的功能。基于YML的动态路由配置lb 是Load Balance的缩写discovery locator enabled true 开启从注册中心动态创建路由的功能server: port: 9527spring: application: name: cloud-gateway cloud: gateway: dis原创 2020-07-24 14:43:04 · 161 阅读 · 0 评论 -
SpringCloud学习-part33 Gateway 基于注解的路由配置
文件结构Config/** * @Author: EzerbelCN * @Date: 2020/7/24 13:10 */@Configurationpublic class GateWayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){ // http://news.baidu.com/guonei原创 2020-07-24 13:47:55 · 200 阅读 · 0 评论 -
SpringCloud学习-part32 Gateway 基于YML的路由配置
id前面的-,代表这是数组内的元素路径的首字母大写:Pathserver: port: 9527spring: application: name: cloud-gateway cloud: gateway: routes: - id: payment_routh #路由ID,没有固定规则,但要求唯一 uri: http://localhost:8001 #匹配后提供服务的路由地址原创 2020-07-24 13:03:17 · 320 阅读 · 0 评论 -
SpringCloud学习-part31 Hystrix图形化Dashboard
监控方配置主函数入口使用注解@EnableHystrixDashboard主函数所在类增加配置/** * * 此配置是为了服务监控而配置,与服务器容错本身无关,SpringCloud升级之后的坑 * ServletRegistrationBean因为SpringBoot的默认路径不是 “/hystrix.stream” * 只要在自己的项目配置上如下的servlet就可以了 * * @return */@Bean public ServletRegistrationBea原创 2020-07-24 09:52:37 · 103 阅读 · 0 评论 -
SpringCloud学习-part30 Hystrix 工作流程
资料地址https://github.com/Netflix/Hystrix/wiki/How-it-Works原创 2020-07-24 07:17:54 · 69 阅读 · 0 评论 -
SpringCloud学习-part29 Hystrix 熔断
主函数入口增加启动注解@EnableCircuitBreaker服务接口/** * @Author: EzerbelCN * @Date: 2020/7/23 10:32 */public interface PaymentService { public String paymentInfo_OK(Integer id); public String paymentInfo_Timeout(Integer id); public String paymentCi原创 2020-07-23 20:57:49 · 126 阅读 · 0 评论 -
SpringCloud学习-part28 Hystrix服务降级的fallback通配
可用场景对于Consumer,fallback方法可以集中起来实现service接口@Componentpublic class PaymentFallbackService implements PaymentHystrixService { @Override public String PaymentInfo_OK(Integer id) { return "------PaymentHystrixFallbackService fall back Paym原创 2020-07-23 16:48:36 · 195 阅读 · 0 评论