SpringCloud

SpringCloud

  • 框架集
  • 提供了一整套微服务解决方案(全家桶)
  • 基于http调用, Rest API

eureka

微服务治理,服务注册和发现

eureka和zookeeper区别

eureka:

  • 强调AP(可用性)
  • 集群构造:对等构造

zookeeper:

  • 强调CP(一致性)
  • 集群构造:主从构造

eureka注册和发现

1、注册服务提供者启动时,向eureka一次次重复注册,直到注册胜利为止2、拉取注册表服务发现者每30秒拉取一次注册表(刷新注册表)3、心跳服务发现者每30秒发送一次心跳数据eureka间断3次收不到一个服务的心跳,会删除这个服务4、自我保护模式非凡状况如果因为网络不稳固或中断,15分钟内,85%以上服务器呈现心跳异样,就会主动进入保护模式在保护模式下,所有服务都不删除网络复原后,能够主动退出保护模式,恢复正常开发期间很容易达到保护模式的条件,会影响测试,在开发期间能够敞开保护模式

搭建eureka服务器
1、增加eureka server依赖
2、yml配置

1、主机名2、禁用保护模式3、针对单台服务器,配置不向本人注册,也不从本人拉取注册表
spring:  application:    name: eureka-serverserver:  port: 2001                          #默认8761eureka:  instance:    hostname: eureka1                 #主机名,集群中辨别不同服务器 server:    enable-self-preservation: false   #开发期间禁用保护模式 client:    register-with-eureka: false       #单台服务器不向本人注册    fetch-registry: false             #单台服务器不从本人拉取

3、启动类注解@EnableEurenaServer,通过注解触发主动配置

单台eureka服务器启动后报错:Connect to localhost:8761 timedout
这是主动配置的一个默认集群服务器,然而这个默认服务器不存在,所以出错
前面本人搭建了集群服务,默认服务器就不会再主动配置

RestTemplase

SpringBoot提供的近程调用工具
相似于HttpClient,能够发送http申请,并解决响应,RestTemplate简化了RestAPI调用,只须要应用它一个办法,就能够实现申请、响应、json转换
办法:

  • getForObject(url,转换的类型.class,提交的参数)
  • postForObject(url,协定体数据,转换的类型.class)

RestTemplate和Dubbo近程调用的区别:

  • RestTemplate:

    • http调用
    • 效率低
  • Dubbo:

    • RPC调用,java的序列化
    • 效率高

Ribbon

负载平衡、申请重试

负载平衡
Ribbon对RestTemplate做了封装,加强了RestTemplate的性能
1、获取地址表
2、轮询一个服务的主机地址列表
3、RestTemplate负责执行最终调用

增加负载平衡
1、ribbon依赖
2、@LoadBalanced注解,对RestTemplate进行性能加强
@LoadBalanced 负载平衡注解

@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){                                //设置调用超时工夫,超时后认为调用失败 SimpleClientHttpRequestFactory f=new SimpleClientHttpRequestFactory(); f.setConnectTimeout(1000);     //建设连贯等待时间 f.setReadTimeout(1000);        //连贯建设后,发送申请后,期待接管响应的工夫 return new RestTemplate(f);}

3、批改调用地址,应用服务ID,而不是具体主机地址

Ribbon重试
一种容错机制,当调用近程服务失败,能够主动重试调用
增加重试:
1、增加spring-retry依赖
2、配置重试参数

1、在yml中配置

  • MaxAutoRetries:单台服务器的重试次数
  • MaxAutoRetriesNextServer:更换服务器的次数

2、在java代码中设置

  • Connecttimeout:与近程服务建设网络连接的超时工夫
  • ReadTimeout:连贯已建设,申请已发送,期待响应的超时工夫
 # 配置 Ribbon 重试次数ribbon: # 次数参数没有提醒,并且会有黄色正告 # 重试次数越少越好,个别倡议用 0, 1 MaxAutoRetries: 1  MaxAutoRetriesNextServer: 2

Hystrix

断路器,服务降级、熔断
零碎容错工具

  • 降级
    调用近程服务失败(宕机、500错、超时),能够降级执行以后服务中的一段代码,向客户端返回后果
    疾速失败
  • 熔断
    当拜访量过大,呈现大量失败,能够过热爱护,断开近程服务不再调用
    限流
    避免故障流传,雪崩效应

降级
1、hystrix依赖
2、启动类增加注解@EnableCircuitBreaker
3、增加降级代码

//当调用近程服务失败,跳转到指定的办法,执行降级代码 @HystrixCommand(fallbackMenthod="办法名")近程调用办法(){    restTemplate.getForObject(url...);}

Hystrix超时

Hystrix有默认的超时工夫:1秒

Hystrix超时要大于ribbon总的重试工夫,否则,ribbon重试可能有效

Hystrix熔断
断路器关上的条件:

  • 10秒内20次申请(必须首先满足)
  • 50%失败,执行了降级代码

断路器关上后,所有申请间接执行降级代码

断路器关上几秒后,会进入半开状态,客户端调用会尝试向后盾服务发送一次调用
如果调用胜利,断路器能够主动敞开,恢复正常
如果调用依然失败,持续放弃关上状态几秒钟

Actuator

springboot提供的日志监控工具,能够裸露我的项目中多种监控信息

  • 衰弱状态
  • 零碎环境变量
  • Spring容器中所有的对象
  • SpringMVC映射的所有门路
  • ...

增加actuator
1、增加actuator依赖
2、yml配置裸露监控数据

management:  endpoints:    web:      exposure:        include: "*"    #"*"                            裸露所有的监控#health                         只裸露衰弱状态#["health","beans","mappings"]  裸露指定的多个监控

Hystrix Dashboard

仪表盘我的项目能够是一个齐全独立的我的项目,与其余我的项目都无关,也不必向注册表注册
1、Hystrix dashboard依赖
2、@EnableHystrixDashboard(启动类退出)
3、yml - 容许对那台服务器开启监控

server:  port: 4001  #容许对那台服务器开启监控hystrix:  dashboard:    proxy-stream-allow-list: localhost    #调整Ribbon的重试参数#针对所有服务的通用配置ribbon:  MaxAutoRetries: 1  #只针对item-service这一个服务无效#对其余服务不利用这个配置item-service:  ribbon:    MaxAutoRetries: 2

Feign

微服务利用中,ribbon 和 hystrix 总是同时呈现,feign 整合了两者

集成工具

  • 近程调用:申明式客户端
  • ribbon负载平衡和重试
  • hystrix降级和熔断

申明式客户端接口
只须要申明一个形象接口,就能够通过接口做近程调用,不须要再应用调用RestTemplate

//调用近程的商品服务,获取订单的商品列表//通过注解,配置://1、调用那个服务//2、调用服务的那个门路//3、向门路提交什么参数数据@FeignClient(name="item-service")public interface ItemClient(){    @GetMapping("/{orderId}")    JsonResult<List<Item>> getItems(@PathVariable String orderId);}

在这里应用@GetMapping("/{orderId}"),指定的是向近程服务调用的门路

Feign继承Ribbon
无需额定配置,曾经启用了负载平衡和重试
默认重试参数:

  • MaxAutoRetries: 0
  • MaxAutoRetriesNextServer: 1
  • ReadTimeout: 1000

feign 启用 hystrix
feign 默认没有启用 hystrix,增加配置,启用 hystrix
1、yml配置

feign:  hystrix:    enabled: true