1.微服务的概念
a.微服务是一种架构风格
b.把一个项目拆封成独立的多个服务,多个服务独立运行,每个服务占用进程
2.springCloud和SpringBoot的关系
Spring Boot是Spring的一套快速配置脚手架,可以基于SpringBoot快速开发单个微服务建构,SpringCloud是一个基于SpringBoot实现的开发工具,SpringBoot专注于快速,方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架,SpringBoot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,SpringCloud恒大一部分是基于SpringBoot实现的,必须基于Spring Boot开发,可以单独使用SpringBoot开发项目,但是SpringCloud离不开SpringBoot
3.SpringCloud相关基础服务组件
4.Nacos(服务注册)
a.Nacos的作用(注册中心)
b.Nacos的安装
1.官网上下载压缩包
2.打开压缩包,运行nacos
3.打开8848端口,访问nacos页面,初始账号和密码都是nacos
c.nacos的使用
1.添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在配置文件中配置服务名和nacos的地址
spring.cloud.nacos.discovery.server-add:localhost:8848
spring.name="服务名" //服务名不要加下划线
3.在对应模块启动类上添加@EnableDiscoveryClient
4.在nacos页面上查看服务类
5.Feign(服务调用)
1.引入依赖
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在调用模块启动类上加入@EnableFeignClient
3.创建对应的Client
@FeignClient("service-vod")
@Component
public interface VodClient {
@DeleteMapping(value = "/eduvod/video/{id}")
public R removeAlyVideo(@PathVariable("id") String id);
}
4.调用接口,测试
6.springcloud调用接口的流程
(1)接口化请求调用当调用被@FeignClient注解修饰的接口时,在框架内部,将请求转换成Feign的请求
实例feign.Request,交由Feign框架处理。
(2)Feign
:转化请求Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请
求,封装了Http调用流程。
(3)Hystrix:熔断处理机制 Feign的调用关系,会被Hystrix代理拦截,对每一个Feign调用请
求,Hystrix都会将其包装成HystrixCommand,参与Hystrix的流控和熔断规则。如果请求判断需要熔断,
则Hystrix直接熔断,抛出异常或者使用FallbackFactory返回熔断Fallback结果;如果通过,则将调用请求传递
给Ribbon组件。
(4)Ribbon:服务地址选择 当请求传递到Ribbon之后,Ribbon会根据自身维护的服务列表,根据服务的服
务质量,如平均响应时间,Load等,结合特定的规则,从列表中挑选合适的服务实例,选择好机器之
后,然后将机器实例的信息请求传递给Http
Client客户端,HttpClient客户端来执行真正的Http接口调用;
(5)HttpClient
:Http客户端,真正执行Http调用根据上层Ribbon传递过来的请求,已经指定了服务地
址,则HttpClient开始执行真正的Http请求
7.Hystrix
a.概念
Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败
时,仍能有其弹性。
b.使用步骤
1.导入maven依赖
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!--hystrix依赖,主要是用 @HystrixCommand -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.开启熔断器
#开启熔断器
feign:
hystrix:
enabled: true
#配置访问时间
hystrix:
metrics:
polling-interval-ms: 6000
3.实现Client类
@Component
public class VodFileDegradeFeignClient implements VodClient {
@Override
public R removeAlyVideo(String id) {
return R.error().message("调用删除单个视频接口出错");
}
@Override
public R batchRemoveAlyVideo(List<String> ids) {
return R.error().message("调用批量删除视频接口出错");
}
}
4.在Client上进行配置
@FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class)
@Component
public interface VodClient {
8.canul(数据库同步技术)
1.现阶段只支持mysql
2.具体配置百度
9.gateway(网关)
9.1简述
基于Spring5.0,springboot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单,有效和统一的API路由管理方式,目标是替代NetFilx Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供网关的基本的功能
9.2工作原理
9.3使用方式
1.导入jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2.书写配置文件
#服务端口
server:
port: 8222
#服务名
spring:
application:
name: service-gateway
cloud:
nacos:
discovery:
#配置nacos地址
server-addr: ****
gateway:
discovery:
locator:
#使用服务发现路由
enabled: true
routes:
- id: service-edu #服务名字
uri: lb://service-edu #路由的url
predicates:
- Path=/eduservice/** #路径匹配
- id: service-ucenter
uri: lb://service-ucenter
predicates:
- Path=/ucenter/** #路径匹配
9.4负载均衡
gateway中是根据路径将请求平均到服务器集群上
常用的负载均衡方法:轮询,权重,最小请求时间
10springcloud配置中心
10.1作用:
对集群上的配置文件(application.properties,application.yml)进行统一化管理
10.2Nacos进行配置
https://achang.blog.csdn.net/article/details/114670001