eureka的数据结构:双层map
Map<“service-provider”(服务id),map<“localhost:service-provider:8081”(服务实例id),instance(服务实例对象-元数据)>>
ribbon选择provider方式是轮循
RoundRobinRule 轮循算法
Spring Cloud 小总结
Hystrix
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
@LoadBalanced//开启ribbon负载均衡
@EnableCircuitBreaker//启用hystrix
微服务雪崩问题:
问题原因:服务调用链较长,其中一个服务出错会导致整个线程资源得不到释放,在有线的线程池中很容易会将线程资源耗尽。最关键的点在于出错的那一个服务
解决手段:线程隔离,服务降级(服务熔断)。
线程隔离:就是hystrix帮你创建维护一个线程池 接收到的请求都交给这个线程池处理。
服务降级:快速返回一个自定义的预期的值 @HystrixCommand//(fallbackMethod=“queryByIdfallback”)//降级注解
服务熔断:阻止失效的请求执行
Feign
consumer注释
org.springframework.cloud
spring-cloud-starter-openfeign
@EnableFeignClients // 开启feign客户端
编写feigh的客户端接口 @FeignClient(value = “service-provider”) // 标注该类是一个feign接口
feign对hytrix的支持
使用@component将fallbackfactory全局降级的类添加到spring中
在feign客户端指定一下这个类: @FeignClient(value=“service-provider”,fallbackFactory=UserClientFallback.class)
Zuul
网关
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
配置:
server:
port: 10010 #服务端口
spring:
application:
name: api-gateway #指定服务名
zuul:
routes:
service-provider: # 这里是路由id,随意写
path: /service-provider/** # 这里是映射路径
url: http://127.0.0.1:8081 # 映射路径对应的实际url地址
ES6语法指南
Let:声明局部变量
Const:声明常量
如果使用const定义一个对象就不能指向新的对象因为地址变了但是可以更改对象里面的属性