# cloud2020 **Repository Path**: YuQiangZ/cloud2020 ## Basic Information - **Project Name**: cloud2020 - **Description**: 尚硅谷SpringBoot学习笔记 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-04-29 - **Last Updated**: 2022-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringCloud 学习笔记 2021年04月29日开始学习。 下图为学习主要的技术点: ![](asset/cloud技术.jpg) 将以上图为参考逐渐完成spring cloud的入门学习。 - **tips1**:dependencyManagement和dependency区别:dependencyManagement一般会出现在一个项目的最顶层的父POM中,在子项目引用一个依赖 时不用显示的列出版本号,**_只声明依赖并不引入实现_**。 - _**约定大于配置大于编码**_ ## Rest微服务工程构建 ![](asset/rest微服务工程图.jpg) 微服务模块构建过程: > 建module > 改POM > 写YAM > 主启动 > 业务类 - **tips2**: 复习数据库知识 - **tips3**:在启动项目时,往往会出现接口占用的情况,需要手动关闭,在win10中关闭端口的命令如下:`netstat -aon|findstr "端口号"` `tasklist|findstr "PID号"` ### 构建8001服务时遇到的问题 1.type-aliases-package > 也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean `type-aliases-package: com.atguigu.springcloud.entities` 2.将公共部分打包,单独抽取一个模块,以供别的模块进行调用 3.@RequestBody注解:[详细解释](https://blog.csdn.net/justry_deng/article/details/80972817/) ## Eureka服务注册与发现 ![](asset/Eureka结构图.jpg) 共包含两个组件 ![](asset/eureka包含组件.jpg) ### host中添加内容(不用记得删除) ```text C:\Windows\System32\drivers\etc\host 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com 127.0.0.1 myzuul.com 127.0.0.1 config-3344.com 127.0.0.1 client-config.com 127.0.0.1 cloud-provider-payment ``` 下图80端口为服务的调用者,7001和7002为eureka的服务端,8001和8002为eureka的客户端。他们都注册在 eureka server中。 ![](asset/eureka服务注册与发现结果图.jpg) 架构示意图如下: ![](asset/第一个架构.jpg) 自我保护机制 ![](asset/eureka自我保护机制.jpg) ## zookeeper服务注册与发现 - zookeeper是一个分布式协调工具,可以实现注册中心功能 80/8004端口 ![zookeeper示意图](asset/zookeeper服务注册和发现.jpg) ```json { "name": "cloud-provider-payment", "id": "a6f8567f-0193-4cf5-839b-67f4bf425f02", "address": "DESKTOP-L07VRB4", "port": 8004, "sslPort": null, "payload": { "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance", "id": "application-1", "name": "cloud-provider-payment", "metadata": {} }, "registrationTimeUTC": 1627915888631, "serviceType": "DYNAMIC", "uriSpec": { "parts": [ { "value": "scheme", "variable": true }, { "value": "://", "variable": false }, { "value": "address", "variable": true }, { "value": ":", "variable": false }, { "value": "port", "variable": true } ] } } ``` 这个没有调通。 ## consul服务注册与发现 80/8006 端口 - 启动`consul agent -dev` ![](asset/consul.jpg) ## 三个注册中心的异同 ![](asset/三个注册中心异同.jpg) - C:Consistency(强一致) - A:Availability(可用性) - P:Partition tolerance(分区容错性) ![](asset/CAP原则.jpg) ## Ribbon服务调用 一句话:负载均衡+RestTemplate调用 ```java @Bean /** * 负载均衡 */ @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } ``` ![](asset/Ribbon.jpg) ![](asset/负载均衡.jpg) ![](asset/Ribbon结构示意图.jpg) ## OpenFeign服务调用 80/ 7001/7002 8001/8002 **_是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需要创建一个接口并在接口上添加注解即可。_** 使用步骤如下 > 1.在主启动类上添加注解:@EnableFeignClients > > 2.在service层实现跟服务提供端一样的接口,并添加@FeignClient注解 > ```java > @Component > @FeignClient("CLOUD-PAYMENT-SERVICE") > public interface PaymentFeignService { > > @GetMapping(value="/payment/get/{id}") > CommonResult getPaymentById(@PathVariable("id") Long id); > @GetMapping(value = "/payment/feign/timeout") > String paymentFeignTimeout(); > > } >``` ![](asset/OpenFeign.jpg) ![](asset/Feign作用.jpg) 到这了已经学习完服务注册与服务调用,服务注册的目的是使所有的服务都处在可以监控的状态,监控其状态。服务调用是在服务注册的基础上完成的, 像ribbon.openfeign 他们在服务调用的时候回加有负载均衡的功能。 ## Hystrix服务降级 ![](asset/Hystrix服务降级.jpg) 1. 服务降级(fallback):向用户提供一个提示,使客户端不再等待,立即返回。 2. 服务熔断:类比保险丝,达到做大访问量的之后,直接拒绝访问,并调用服务降级的方法返回友好的提示。 ![](asset/服务熔断.jpg) 3. 服务限流:秒杀等高并发操作,严禁一窝蜂的过来拥挤,大家排队,一秒N个,有序进行。 ### 项目构建 > 7001单机 > 80 > 8001 ## GateWay服务网关 ![](asset/GatWay服务网关.jpg) ![](asset/服务网关位置.jpg) ![](asset/GateWay特性.jpg) ### 三大概念 1. 路由(Route) ![](asset/路由.jpg) 2. 断言(Predicate) ![](asset/断言.jpg) 3. 过滤(Filter) ![](asset/过滤.jpg) ![](asset/gateway工作流程.jpg) ## Config服务配置 ![](asset/Config服务配置.jpg) ![](asset/Config是什么.jpg) ![](asset/Config逻辑图.jpg) ![](asset/config推荐配置.jpg) ![](asset/Config小总结.jpg) ![](asset/bootstrap配置文件.jpg) ## Bus消息总线 ![](asset/Bus消息总线.jpg) ![](asset/消息总线.jpg) 这个还不太会!!!!!!!!!!!!! 3355、3366两个工程 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ config和bus有机会再听一下。 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ## Stream消息驱动 消息中间件的上层屏蔽 作用:屏蔽底层中间件的差异,降低切换成本,统一消息的编程模型。 ![](asset/Stream.jpg) **这个也需要消息中间件的知识。** ## sleuth请求链路跟踪 ![](asset/seluth.jpg) # springcloud alibaba ![](asset/springalibaba.jpg) ## Nacos Nacos = Eureka + Config + Bus ![](asset/注册中心对比.jpg) 1. Nacos服务注册与发现功能演示:83/9001/9002 2. Nacos作为配置中心:3377 ## sentinel ![](asset/sentinel流控.jpg) ![](asset/sentinel流控01.jpg) ## seata 分布式事务解决方案 ![](asset/事务处理过程.jpg) ![](asset/事务简单理解.jpg) ![](asset/分布式事务流程.jpg)