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

}

相关推荐
NiNg_1_2343 分钟前
Spring Boot项目pom.xml文件详解
spring boot·后端·websocket
潜洋5 分钟前
Spring Boot教程之Spring Boot简介
java·spring boot·后端
魔道不误砍柴功32 分钟前
@ComponentScan:Spring Boot中的自动装配大师
java·spring boot·后端
J老熊1 小时前
RabbitMQ 在 Java 和 Spring Boot 中的应用详解
java·开发语言·spring boot·后端·系统架构·rabbitmq·java-rabbitmq
江河湖海1 小时前
3. 用Ruby on Rails创建一个在线商城
后端·ruby on rails
新智元1 小时前
Grok 3证明黎曼猜想,训练遭灾难性事件?数学家称不夸张,两年内AI将解出千禧年难题
人工智能·后端
hummhumm2 小时前
第 17 章 - Go语言 上下文( Context )
java·服务器·网络·后端·python·sql·golang
刽子手发艺2 小时前
Javamail发送Excel附件具体实现
java·后端·excel
paopaokaka_luck2 小时前
【366】基于springboot的高校物品捐赠管理系统
java·spring boot·后端
叫我:松哥3 小时前
基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型
后端·爬虫·python·数据分析·django·bootstrap·薪资预测