SpringCloud总结

三步走

1、搭springboot项目 引入启动器

2、覆盖默认配置

3、springboot的引导类上加上注解,告诉eureka是服务还是客户端

什么是SpringCloud?

是一套微服务架构的解决方案,是很多组件的集合。

Eureka:注册中心 服务注册和发现服务

Ribbon:负载均衡

Hystrix:熔断组件

Feign:基于Http远程调用组件

Zuul:网关 请求鉴权 服务路由 过滤器

一、Eureka

注册中心:eureka-server

1、引入服务端启动器

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

</dependency>

2、配置应用名spring.application.name=eureka-server

注册地址

eureka:

client:

service-url:

defaultZone: http://localhost:端口/eureka

3、在引导类上加上注解@EnableEurekaServer

客户端:service-provider service-consumer

1、引入客户端启动器

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

2、配置应用名spring.application.name=service-provider

从哪个注册地址获取服务ip列表

eureka:

client:

service-url:

defaultZone: http://localhost:10089/eureka

3、在引导类上加注解@EnableEurekaClient(eureka提供) 或 @EnableDiscoveryClient(推荐使用:springcloud提供)

二、Ribbon

1、正常是引入启动类,但是ribbon已经被Eureka集成了,所以ribbon不用再单独引入启动类

2、在引导类中注册的RestTemplate工具类上加注解@LoadBalanced(负载均衡)

3、修改调用方式,用服务名去调用

由原来的固定ip调用User user = restTemplate.getForObject("http://"+host+":"+port+"/user/" + id, User.class);

改造为负载均衡调用User user = restTemplate.getForObject("http://service-provider/user/" + id, User.class);

三、Hystrix

降级:检查每次的请求, 是否请求超时 或 连接池已满

1、引入启动器

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

</dependency>

2、在引导类上加注解@EnableCircuitBreaker

3、定义降级方法:

局部:降级方法要和被降级方法的入参和返回值都保持一致,方法名可以任意,但是要见名知意

全局:降级方法返回值和被降级方法的返回值保持一致,入参必须为空(因为能用的降级方法会被多个方法使用,多个方法无法保证入参一致),方法名可以任意,但是要见名知意

4、使用

局部:在被降级方法上加上注解@HystrixCommand(fallbackMethod="局部降级方法名"),要在注解内指定降级方法名

全局:在被降级的类上加注解@DefaultProperties(defaultFallback="全局降级方法名") 并且要在 降级的方法上加上注解@HystrixCommand

熔断:如果失败请求次数达到阈值(默认最低20次,50%失败率)不再发送请求到服务端

1、close:熔断闭合状态, 所有发送请求都能正常送达 (没有开启熔断)

2、open:熔断打开状态, 所有请求都无法发送到达 (开启了熔断,就像保险丝被烧断了)

3、half open:熔断半开状态,在打开状态状态默认5s后,过了熔断打开状态的休眠期后,进入到的状态,会放过去部分请求:

如果放过到请求全部健康返回,则将状态切换为close熔断关闭状态(所有请求都正常放行);

如果放过的请求没有健康正常返回,则将状态切换为open熔断打开状态

四、Feign

1、引入OpenFeign启动器

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

2、在引导类上加注解@EnableFeignClients

3、定义接口,在接口上加注解@FeignClient(value = "service-provider", fallback=UserClientFallback.class, configuration = FeignConfig.class) //标注了一个feign接口

4、接口定义要求:入参和出参必须和调用的目标方法接口保持一致,类似于之前的controller,将uri写到方法上@GetMapping("/user/{id}")

5、开启熔断:

feign:

hystrix:

enabled: true # 开启Feign的熔断功能

6、创建一个熔断降类,实现feign接口,实现对应的方法,方法中写降级内容

五、Zuul

1、引入启动器

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-zuul</artifactId>

</dependency>

2、配置路由规则

1、zuul.routes.服务路由的名称.path=/service-provider/**

zuul.routes.服务路由的名称.url=http://127.0.0.1:8081

2、zuul.routes.服务路由的名称.path=/service-provider/**

zuul.routes.服务路由的名称.serviceId=service-provider

3、zuul.routes.服务名称=/service-provider/** 简写版,推荐使用

4、不配,即默认配置,默认情况,每个微服务的服务名,即是访问映射地址

3、在引导类加注解@EnableZuulProxy

4、zuul过滤器

自定义的过滤器继承顶级父类

public abstract ZuulFilter implements IZuulFilter{

//过滤类型 pre route post error

abstract public String filterType();

//优先级 数字越小优先级越高 建议留下可扩展空间 为什么会有:有多个过滤器时,如果返回的过滤类型filterType都相同,则需要配置优先级

abstract public int filterOrder();

//true表示会运行run方法 false不运行run方法

boolean shouldFilter();// 来自IZuulFilter

//真正实现的业务逻辑

Object run() throws ZuulException;// IZuulFilter

}

相关推荐
captain3769 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
步行cgn10 小时前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
IT_陈寒10 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
泡海椒10 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go10 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥430910 小时前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
岩钧11 小时前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端
学到老活到老11 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
用户3600555790011 小时前
Kestrel_VLLM - 25 · 全注意力层设备化、整层对拍与访存粒度
后端
Flynn Liang11 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai