IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 关于学习SpringCloud的整理 -> 正文阅读

[Java知识库]关于学习SpringCloud的整理

关于学习SpringCloud的整理

这段时间学习了SpringCloud的一些东西,现在整理下来方便以后复习或者供给大家学习参考,如果有不对的地方希望大家指正,我会虚心接受.

1.eureka

1.1 eureka作用

实例化服务,注册到eureka,eureka记录服务,客户端获取服务,基于负载均衡调用服务,定期发送检查心跳.

1.2 eureka记录

服务提供者在启动时,会检测配置属性中的: eureka.client.register-with-erueka=true 参数是否为true,事实上默认就是true。如果值确实为true,则会向EurekaServer发起一个Rest请求,并携带自己的元数据信息,EurekaServer会把这些信息保存到一个双层Map结构中 .

  • 第一层Map的Key就是服务id,一般是配置中的 spring.application.name 属性,user-service
  • 第二层Map的key是服务的实例id。一般host+ serviceId + port,例如: localhost:user-service:8081值则是服务的实例对象,也就是说一个服务,这样可以同时启动多个不同实例,形成集群。

1.3 配置

以下是服务端的配置参数参考

server:
port: ${port:9091}
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123
url: jdbc:mysql://localhost:3306/bill-manager
application:
name: bill-service
#整合mybatis
mybatis:
type-aliases-package: com.bobby.pojo #别名搜索
mapper-locations: classpath:/mybatis/*.xml
eureka:
client:
service-url:
defaultZone: HTTP://127.0.0.1:10086/eureka
instance:
prefer-ip-address: true
# ip地址
ip-address: 127.0.0.1
lease-expiration-duration-in-seconds: 5
lease-renewal-interval-in-seconds: 5

1.4 消费端拉取服务备份时间间隔

eureka:
client:
registry-fetch-interval-seconds: 30

1.5 失效保护

eureka:
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

1.6 负载均衡

1.6.1 使用方法
1.添加注解
@LoadBalanced
RestTemplate();
2.使用带服务id的地址
1.6.2 均衡策略与修改

轮循
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
格式是: {服务名称}.ribbon.NFLoadBalancerRuleClassName ,值就是IRule的实现类。

2. 熔断器(Hystrix)

2.1 雪崩问题

微服务中,服务间调用关系错综复杂,一个请求,可能需要调用多个微服务接口才能实现,会形成非常复杂的调用链路.请求阻塞,用户请求就不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞.

Hystrix 解决雪崩问题的手段,主要包括:
  • 线程隔离
  • 服务降级

2.2 线程隔离

Hystrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加速失败判定时间。

2.3 服务降级

用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息).触发服务降级的情况:

  • 线程池已满
  • 请求超时
    使用方法
  • 消费者启动类添加注释@EnableCircuitBreaker
  • 编写降级逻辑
  • 通过Contrller映射方法添加@HystrixCommand(fallbackMethod = “queryByIdFallBack”)注释,指定降级逻辑,或在Controller类添加@DefaultProperties(defaultFallback = “defaultFallback”)指定默认降级逻辑
    超时设置
    hystrix:
    command:
    default:
    execution:
    isolation:
    thread:
    timeoutInMilliseconds: 2000

2.4 服务熔断

状态机有3个状态:

  • Closed:关闭状态(断路器关闭),所有请求都正常访问。
  • Open:打开状态(断路器打开),所有请求都会被降级。Hystrix会对请求情况计数,当一定时间内失败请求,百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是50%,请求次数最少不低于20次。
  • Half Open:半开状态,不是永久的,断路器打开后会进入休眠时间(默认是5S)。随后断路器会自动进入半
    开状态。此时会释放部分请求通过,若这些请求都是健康的,则会关闭断路器,否则继续保持打开,再次进
    行休眠计时
  • 修改熔断策略
    hystrix:
    command:
    default:
    execution:
    isolation:
    thread:
    timeoutInMilliseconds: 2000 #服务降级超时时间
    circuitBreaker:
    errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%
    sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒
    requestVolumeThreshold: 10 # 熔断触发最小请求次数,默认值是20

3. Feign

Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。

3.1 使用Feign

  • 首先这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟Mybatis的mapper很像
  • @FeignClient ,声明这是一个Feign客户端,同时通过 value 属性指定服务名称
  • 接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取果
  • @GetMapping中的/user,请不要忘记;因为Feign需要拼接可访问的地址

3.2 Feign 内置ribbon配置

ribbon:
ConnectTimeout: 1000 # 连接超时时长
ReadTimeout: 2000 # 数据通信超时时长
MaxAutoRetries: 0 # 当前服务器的重试次数
MaxAutoRetriesNextServer: 0 # 重试多少次服务
OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试

3.3 Feign 内置Hystrix配置

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

写在最后

关于SpringCloud的学习大多是一些概念和配置方法上的,跟具体逻辑关联不大,容易学习,继续加油.
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:25:20  更:2021-08-24 15:27:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/19 0:33:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码