内容介绍:简易版springcloud组件快速使用介绍
springcloud微服务架构快速应用
springcloud综述:使服务的提供者和消费者之间的交互变得便捷,方便相互之间的请求交互;使服务变得更可靠(高可用);使请求变得更随机(不需要写请求的具体地址,写个服务id即可)
总结起来就是6个字:便捷,可靠,高效
一、springboot-项目的构建
1.综述:
springboot的出现,改变了项目的管理和配置结构(只是配置少了),但我们业务核心代码的编写不会变。
2.核心理念:约定大于配置
1.在springboot中提供了一个启动器,在其中写好了大量的默认配置。引入启动器的依赖,就可以实现这些 默认配置 和 配置自动化 。具体配置在Mate-INF/spring.factory
中
2.所谓约定:就是指公共的,大家都相同的东西,可以约定。但是个性化的东西还是必须配置的
a.公共的配置(可以默认)例如:
MySQL端口号:3306
redis端口号:6379
Tomcat端口号:8080
b.个性化的配置(必须配置)例如:
1.数据库(使用数据库相关的启动器一定要配置):ip地址,用户名,密码
- 在springboot项目中,所有的组件功能开启都需要在项目启动类上加一个@Enable…注解来实现,但是Eureka客户端发现(注册)功能注解(@EnableDiscoveryClient)可以不用添加。
二、Eureka注册中心
1.综述:
服务的注册、发现、监控中心,属于被动营业者。需要服务的提供者和调用者注册为Eureka客户端,提供者主动到Eureka服务端定时推送(注册)自己的服务信息、调用者主动到Eureka服务端定时拉取已经注册的服务信息
Eureka注册中心高可用的实现方法:多个Eureka Server之间也会互相注册为服务,当服务提供者注册到Eureka Server集群中的某个节点时,该节点会把服务的信息同步给集群中的每个节点,从而实现高可用集群。因此,无论客户端访问到Eureka Server集群中的任意一个节点,都可以获取到完整的服务列表信息。
三、ribbo负载均衡
1.所有服务都应该可以集群,既然集群了就要实现负载均衡
2.ribbon实现服务之间相互调用的负载均衡。网关、feign都通过ribbon实现负载均衡。而网关的负载均衡由Nginx实现,Nginx的负载均衡由Nginx集群内部模拟一台虚拟服务器来实现
3.ribbon默认的负载均衡策略是轮询
四、hystrix熔断器
1.简介:Hystix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败
2.具体的应用场景:
微服务中,服务间调用关系错综复杂,一个请求,可能需要调用多个微服务接口才能实现,会形成非常复杂的调用链路。
例如:一次业务请求,需要调用A、B、C、D四个服务,这四个服务又可能调用其它服务。
如果微服务D发生异常,请求阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞
服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,形成雪崩效应。
Hystix解决雪崩问题的手段主要是服务降级,包括:
- 线程隔离
- 服务熔断
五、zuul网关(或APIGateway)
1.综述:
Zuul作为网关的其中一个重要功能,就是实现请求的鉴权。而这个动作我们往往是通过Zuul提供的过滤器来实现的。
1.1.接收请求,解析请求
1.2.根据请求,选取请求实例 (ip:port)
1.3.重新封装请求:头、参数
1.4.请求发起
2.1解析响应(排雷,过滤敏感信息)
2.2重新封装(网管认为安全的)
2.3将响应返回给客户端
2.核心:zuul核心是一个servlet
3.应用
Zuul中默认就已经集成了Ribbon负载均衡和Hystix熔断机制。但是所有的超时策略都是走的默认值,比如熔断超时时间只有1S,很容易就触发了。因此建议我们手动进行配置:
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 6000
ribbon:
ConnectTimeout: 1000
ReadTimeout: 2000
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 0
六、feign(rest服务封装)
1.简介:Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。
2.负载均衡:Feign中本身已经集成了Ribbon依赖和自动配置:
3.Hystix支持(了解):Feign默认也有对Hystix的集成。只不过,默认情况下是关闭的。我们需要通过下面的参数来开启:
feign:
hystrix:
enabled: true # 开启Feign的熔断功能
七、ConfigServer配置中心
八、构建web项目步骤
1.构建springboot父工程:例如cloud_parent
1.打包方式改成pom
<packaging>pom</packaging>
2.引入Springboot父启动器
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/>
</parent>
3.锁定基本要用的依赖版本
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
<mapper.starter.version>2.0.4</mapper.starter.version>
<mysql.version>5.1.46</mysql.version>
<pageHelper.starter.version>1.2.5</pageHelper.starter.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 通用Mapper启动器 -->
<dependency>
<groupId>tk.mybatis</groupId>
<</