springcloud概述及微服务搭建

微服务的概念 :
微服务(micro service),是一种架构风格,它将一个复杂的应用拆分成多个独立自治的服务,服务与服务间通过松耦合的形式交互。这些服务都可以单独的开发,测试,部署,运行;相互协作,更好完成原来大的业务系统的所有功能。

微服务的特点,优点和缺点:
特点
解耦:服务做了拆分,相互影响会大大降低,符合软件设计的低耦合原则。
组件化:每个服务都相当于一个独立的组件,可以进行独立升级和扩展,可以被重复使用,节省人力成本。 业务能力强:职责明确,更专注于某一个业务
自治:一个微服务就是一个独立的实体,它可以独立部署、升级,服务与服务之间通过REST等形式的标准接口进行通信,并且一个微服务实例可以被替换成另一种实现,而对其它的微服务不产生影响。
敏捷性: 微服务可以敏捷开发(迭代)

优点
易于开发和部署(单个项目)
启动快
局部更新,对整体影响很小
技术不受限制
按需求伸缩
devops 促进开发,运维和测试(质检QA)的协作

缺点
复杂度高:微服务间通过REST、RPC等形式交互,需要考虑被调用方故障、过载、消息丢失等,分布式锁,分布式事务
运维复杂:需要一个设计良好的监控系统对各个微服务的运行状态进行监控。
影响性能:微服务的间通过REST、RPC等形式进行交互,通信的时延会受到较大的影响

springcoud特征:

分布式/版本化配置
服务注册和发现
路由
服务到服务调用
负载均衡
断路器
全局锁
领导选举和集群状态
分布式消息传递

springcloud的主要组件,体系架构及版本号
在这里插入图片描述
服务注册中心(服务注册和发现):
eureka:一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
nacos:Nacos 致力于帮助您发现、配置和管理微服务。

服务配置中心
springcloud config:配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。
nacos:Nacos 致力于帮助您发现、配置和管理微服务。

服务路由(网关)
zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
gateway:该项目提供了一个库,用于在 Spring WebFlux 之上构建 API 网关。Spring Cloud Gateway 旨在提供一种简单而有效的方式来路由到 API,并为它们提供横切关注点,例如:安全性、监控/指标和弹性。

服务熔断器
hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
sentinel:流量控制和服务降级,断路和系统自适应保护

消息队列(异步)
kafka:kafka是由apache软件基金会开发的一个开源流处理框架,由JAVA和scala语言编写。是一个高吞吐量的分布式的发布和订阅消息的一个系统。Kafka® 用于构建实时的数据管道和流式的app.它可以水平扩展,高可用,速度快,并且已经运行在数千家公司的生产环境。

服务到服务调用(同步)
ribbon:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用
open feign:Feign是一种声明式、模板化的HTTP客户端。

微服务规划父子项目搭建

在这里插入图片描述
在这里插入图片描述
搭建父子工程:

pom.xml的properties配置:

pom.xml的dependencyManagement配置:

org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} org.projectlombok lombok ${lombok.version} mysql mysql-connector-java ${mysql.version} org.springframework.boot spring-boot-starter-test ${spring-boot.version} test dependency>
       <groupId>com.alibaba</groupId>                  
       <artifactId>druid</artifactId>                 
        <version>${druid.version}</version>              
        </dependency>              
        <dependency>                  
        <groupId>com.alibaba</groupId>                 
         <artifactId>druid-spring-boot-starter</artifactId>                  
         <version>${druid.version}</version>              
         </dependency>              
         <!-- 分页插件pagehelper -->              
         <dependency>                  
         <groupId>com.github.pagehelper</groupId>                  
         <artifactId>pagehelper-spring-boot-starter</artifactId> 
                          <version>${pagehelper.version}</version>            
                            </dependency>              
                            <!-- 分页插件pagehelper -->              
                            <!-- swagger2 -->            
                            <!--  <dependency>                  
                            <groupId>io.springfox</groupId>                  
                            <artifactId>springfox-swagger2</artifactId>
                                              <version>${swagger.fox.version}</version>

                                              </dependency>              
                                              <dependency>                 
                                               <groupId>io.springfox</groupId>                  
                                               <artifactId>springfox-swagger-ui</artifactId> 
                                                                 <version>${swagger.fox.version}</version>   
                                                                            
       </dependency>-->             
        <!-- swagger-spring-boot-starter -->              
        <dependency>                  
        <groupId>com.spring4all</groupId>                  
        <artifactId>swagger-spring-boot-starter</artifactId>                  
        <version>${swagger-spring-boot}</version>              
        </dependency>              
        <!-- fastjson -->             
         <dependency>                  
         <groupId>com.alibaba</groupId>                  
         <artifactId>fastjson</artifactId>                  
         <version>${fastjson.version}</version>           
            </dependency>          
            </dependencies>    </dependencyManagement>

知识点:
dependencyManagement和dependencies区别:
dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。
dependencyManagement里只是声明依赖, 子项目按需依赖。只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom。 如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

dependency中type属性: 引入包的类型 默认为jar 当为pom时,作用为需要引入很多jar包的时候会导致pom.xml过大,可以定义一个父项目,通过type=pom把父项目的所有包都可以引入,选择性使用。
dependency中scope属性:
打包范围,有以下选项:
compile, 缺省值,适用于所有阶段,会随着项目一起发布。在编译和打包时都会将依赖存储进去
provided,类似compile,期望JDK、容器或使用者会提供这个依赖。
runtime, 在运行时使用,如JDBC驱动,适用运行和测试阶段。
test 只在测试时使用,用于编译和运行测试代码。不会随项目发布。 打包命令示例: mvn package -Dmaven.test.skip=true
system, 类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
import, 引入一个父类项目pom,选择性的继承,达到类似parent标签的作用,解决了单继承问题

编写一个微服务工程:

1.创建一个单Java项目,不引用任何jar包
在这里插入图片描述
2.父项目jar包
在这里插入图片描述
3.在父项目下面继续创建子项目
在这里插入图片描述
4.在子项目下配置jar包
在这里插入图片描述
5.在子项目下创建孙项目:
在这里插入图片描述
6.配置application.yml文件
在这里插入图片描述

7.写出启动类,配置注解

在这里插入图片描述8.配置数据库自动生成代码格式
在这里插入图片描述

6.孙项目是实际执行得项目,不需要引入jar包,可直接继承父类的,需要了用数据库生成controll,entity,mapper,service层
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:http://localhost:14221/swagger-ui/index.html

在这里插入图片描述
成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸葛博仌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值