网站数据库连接出错,安徽建设工程安全监督网站,网络招商,龙岗网站开发SpringCloud微服务全家桶学习笔记【持续更新】
gitee仓库 内容#xff1a;SpringCloud SpringCloud alibaba
技术栈#xff1a;Java8mavengit#xff0c;githubNginxRabbitMQSpringBoot2.0
微服务架构概述
微服务架构是一种架构模式#xff0c;它提倡将单一应用程序划…SpringCloud微服务全家桶学习笔记【持续更新】
gitee仓库 内容SpringCloud SpringCloud alibaba
技术栈Java8mavengitgithubNginxRabbitMQSpringBoot2.0
微服务架构概述
微服务架构是一种架构模式它提倡将单一应用程序划分成一组小的服务服务之间互相协调、互相配合为用户提供最终价值。每个服务运行在其独立的进程中服务与服务间采用轻量级的通信机制互相协作通常是基于HTTP协议的RESTful API。每个服务都围绕具体业务进行构建并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制对具体的一个服务而言应根据业务上下文选择合适的语言、工具对其进行构建 主流技术框架
功能框架服务注册中心Eureka,Zookeeper,Consul,Nacos服务调用Ribbon,LoadBalancer服务调用2Feign,OpenFeign服务降级Hydtrix,Resilience4j,Sentienl服务网关Zuul,Zuul2,GateWay服务配置Config,Nacos服务总线Bus,Nacos
开发环境及相关框架版本
框架版本cloudHoxton.SR1boot2.2.2.RELEASEcloud alibaba2.1.0.RELEASEjava1.8maven3.8.2,3.5以上即可mysql5.7及以上
项目搭建
新建project工作空间和项目结构及父工程pom依赖版本声明 在搭建项目时 约定配置编码 在父工程pom文件中声明依赖版本等约束
父工程pom文件配置
dependencyManagement里只是声明依赖并不实现引入因此子项目需要显示的声明需要用的依赖。
!--统一jar包版本管理--propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetjunit.version4.12/junit.versionlog4j.version1.2.17/log4j.versionlombok.version1.16.18/lombok.versionmysql.version5.1.47/mysql.versiondruid.version1.1.16/druid.versionmybatis.spring.boot.version1.3.0/mybatis.spring.boot.version/properties
!--子模块继承之后提供作用锁定版本子模块不需要写groupId和version--dependencyManagementdependencies!--spring boot 2.2.2--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion2.2.2.RELEASE/versiontypepom/typescopeimport/scope/dependency
!-- spring cloud Hoxton.SR1--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversionHoxton.SR1/versiontypepom/typescopeimport/scope/dependency
!-- spring cloud alibaba 2.1.0.RELEASE--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2.1.0.RELEASE/versiontypepom/typescopeimport/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion${druid.version}/version/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion${mybatis.spring.boot.version}/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/version/dependencydependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion${log4j.version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/versionoptionaltrue/optional/dependency/dependencies/dependencyManagement1.构建微服务模块流程
建module改pom写yml主启动类业务类
2.微服务搭建
Eureka基础知识
1.什么是服务治理
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理
在传统的rpc远程调用框架中管理每个服务与服务之间依赖关系比较复杂管理比较复杂所以需要使用服务治理管理服务于服务之间依赖关系可以实现服务调用、负载均衡、容错等实现服务发现与注册。
2.什么是服务注册与发现
Eureka采用了CS的设计架构Eureka Server 作为服务注册功能的服务器它是服务注册中心。而系统中的其他微服务使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。 在服务注册与发现中有一个注册中心。当服务器启动的时候会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方消费者|服务提供者以该别名的方式去注册中心上获取到实际的服务通讯地址然后再实现本地RPC调用RPC远程调用框架核心设计思想在于注册中心因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中都会有一个注册中心(存放服务地址相关信息(接口地址))
3.Eureka包含两个组件Eureka Server和Eureka Client
Eureka Server提供服务注册服务
各个微服务节点通过配置启动后会在EurekaServer中进行注册这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息服务节点的信息可以在界面中直观看到。
EurekaClient通过注册中心进行访问
是一个Java客户端用于简化Eureka Server的交互客户端同时也具备一个内置的、使用轮询(round-robbin)负载算法的负载均衡器。在应用启动后将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳EurekaServer将会从服务注册表中把这个服务节点移除默认90秒
4.Eureka集群管理原理 5.Eureka模拟集群
修改C:\Windows\System32\drivers\etc中hosts文件
在文件中添加 以此来模拟集群服务将可以注册到三个服务注册中心中当某一个注册中心宕机后并不影响业务
6.负载均衡 将处理同一业务的服务部署在不同的服务器上当访问量过大时可分流访问不同的服务器
订单服务访问地址不能写死
使用LoadBalanced注解赋予RestTemplate负载均衡的能力 先要启动EurekaServer7001/7002服务
再要启动服务提供者provider8001/8002服务
使用客户端8080端口访问http://localhost:8080/consumer/payment/get/3
访问结果每一次请求都轮循访问8001/8002
Ribbon和Eureka整合后Consumer可以直接调用服务而不用再关心地址和端口号且该服务还有负载功能了。O(∩_∩)O
7.服务发现discovery
主启动类配置EnableDiscoveryClient注解
控制类添加字段 private DiscoveryClient discoveryClient; 通过访问可以验证此方法可获得服务相关信息
8.Eureka自我保护机制
概述 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式 Eureka Server将会尝试保护其服务注册表中的信息不再删除服务注册表中的数据也就是不会注销任何微服务。
如果在Eureka Server的首页看到以下这段提示则说明Eureka进入了保护模式
为什么会产生Eureka自我保护机制 为了防止EurekaClient可以正常运行但是 与 EurekaServer网络不通情况下EurekaServer不会立刻将EurekaClient服务剔除
什么是自我保护模式 默认情况下如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳EurekaServer将会注销该实例默认90秒。但是当网络分区故障发生(延时、卡顿、拥挤)时微服务与EurekaServer之间无法正常通信以上行为可能变得非常危险了——因为微服务本身其实是健康的此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在短时间内丢失过多客户端时可能发生了网络分区故障那么这个节点就会进入自我保护模式。 在自我保护模式中Eureka Server会保护服务注册表中的信息不再注销任何服务实例。 它的设计哲学就是宁可保留错误的服务注册信息也不盲目注销任何可能健康的服务实例。一句话讲解好死不如赖活着
综上自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务健康的微服务和不健康的微服务都会保留也不盲目注销任何健康的微服务。使用自我保护模式可以让Eureka集群更加的健壮、稳定。