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

}

相关推荐
皮卡龙9 分钟前
Spring MVC 接收请求参数的核心
java·spring·mvc
程序员爱钓鱼23 分钟前
Node.js 编程实战:路由处理原理与实践
后端·node.js·trae
hhzz1 小时前
Spring Boot整合Activiti的项目中实现抄送功能
java·spring boot·后端
Victor3562 小时前
Netty(7)如何实现基于Netty的TCP客户端和服务器?
后端
Victor3563 小时前
Netty(8)什么是Netty的ChannelPipeline和ChannelHandler?
后端
没有bug.的程序员3 小时前
高频IO服务优化实战指南
java·jvm·spring·容器
乘风!4 小时前
NSSM启动tomcat部署Java程序
java·服务器·后端·tomcat
代码无疆4 小时前
学点java字节码更易于理解一些特殊的java语法效果
java·后端
星浩AI5 小时前
AI 并不懂文字,它只认向量:一文搞懂 Embedding
后端
程序员博博5 小时前
这才是vibe coding正确的打开方式 - 手把手教你开发一个MCP服务
javascript·人工智能·后端