Learn01-SpringCloud

SpringCloud简介

今日学习知识点

1. Eureka

1.1 Eureka服务端

  • Eureka是服务注册中心。
  • Eureka启动时,会把自己的地址向服务器注册
  • 微服务每隔30s从Eureka拉取一次数据
  • Eureka每30秒发送一次心跳检测,连续三次收不到心跳回应,Eureka就会认为微服务挂掉了
  • 一个服务不可用时,Eureka会进入保护模式,而不是删掉它。(Zookeeper则是立即删除,实现了强一致性,而Eureka则是高可用。这是两者的区别之一)
  • Eureka ==> 高可用|对等结构
  • Zookeeper ==> 一致性|主从结构

  • 主启动类需要添加@EnableEurekaServer注解,来标识启动Eureka注册中心
  • yml文件配置如下(实现高可用,需配置两个或多个环境的Eureka)
spring:
  application:
    name: eureka-server # 为微服务起个名字
    
eureka:
  server:
    enable-self-preservation: false # 关闭保护模式,测试环境下,eureka很容易进入保护模式
#  instance:
#    hostname: eureka1
#  client:
#    register-with-eureka: false # false表示不注册
#    fetch-registry: false # false表示不拉取

#server:
#  port: 2001
---
spring:
  profiles: eureka1

server:
  port: 2001
  
# eureka1 向 eureka2 注册
eureka:
  instance:
    hostname: eureka1
  client:
    service-url: 
      defaultZone: http://eureka2:2002/eureka

---
spring:
  profiles: eureka2

server:
  port: 2002
  
# eureka2 向 eureka1 注册
eureka:
  instance:
    hostname: eureka2
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka

1.2 Eureka客户端

  • 既然都需要向Eureka去注册自己的服务地址:端口信息,那么主启动类需要加上@EnableDiscoveryClient注解。并且yml文件需配置注册中心的地址(有几个注册中心,就写就几个地址)
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

2. Ribbon负载均衡+重试

EurekaClient中已经包含Ribbon依赖

2.1 RestTemplate

RestTemplate是Springboot提供的工具,可以实现跨域访问。类似HttpClientJsonp是一个http工具,实现远程调用

  • 方法
    • getForObject(url, 转换类型, 提交的参数)
    • postForObject(url, 提交的数据, 转换的类型)
  • 主启动类配置一个RestTemplate交给Spring管理
//创建 RestTemplate 实例,并存入 spring 容器
@Bean
public RestTemplate getRestTemplate() {
	return new RestTemplate();
}

2.2 负载均衡

RestTemplate 设置 @LoadBalanced

	// 创建 RestTemplate 实例,并存入 spring 容器
	@Bean
	@LoadBalanced // 负载均衡
	public RestTemplate getRestTemplate() {
		SimpleClientHttpRequestFactory f = new SimpleClientHttpRequestFactory();
		f.setConnectTimeout(1000); // 设置超时时间
		f.setReadTimeout(1000); // 接收请求时间
		return new RestTemplate(f);
	}
  • 访问路径设置为服务id,而不是写死的端口号

2.3 重试

  • 需要添加依赖spring-retry 依赖
  • yml配置ribbon重试
ribbon:
	MaxAutoRetried: 1 # 失败后最大重试次数
	MaxAutoRetriedNextServer: 2 # 失败后,最多连接下一个服务器的个数
	OkToRetryOnAllOperations: true # 是否对所有操作都重试,默认false,只对get请求重试,对post请求不重试

3. Hystrix降级+断路器

hystrix可以实现降级,方访问失败满足一定要求是,就会对访问降级,
启动断路器,断路器提供两个核心功能:

  • 降级,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据
  • 熔断,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级
  • 可以使用 @SpringCloudApplication 注解代替三个注解
    //@SpringBootApplication
    //@EnableDiscoveryClient
    //@EnableCircuitBreaker

3.1 Hystrix+Ribbon+Dashboard

可以使用Dashboard来监控后台服务请求。相当于一个仪表盘

4. Feign

在微服务中,Ribbon和Hystrix总是同时出现。所以Feign整合了Ribbon+Hystrix

  • Feign默认*开启了Ribbon负载均衡和重试*
  • Feign没有开启断路器,Feign虽然集成了Hystrix,但是没有完全引入Hystrix的依赖,需要自己手动在yml文件中配置。
  • 它使用了Rest风格的接口,只需要写接口类,加上@FeignClient(name = "服务id", fallback=降级实现类.class)就可以实现远程访问。
    在这里插入图片描述

5. Turbine

使用Dashboard只能监控一个微服务。当想要同时监控多个微服务的时候,可以用Turbine监控多个服务,再将Turbine的监控断点暴露给Dashboard。

发布了18 篇原创文章 · 获赞 7 · 访问量 371

猜你喜欢

转载自blog.csdn.net/weixin_44074551/article/details/103300152
今日推荐