Spring Cloud
主要特性
- 分布式/版本化 配置管理
- 服务注册和发现
- 服务路由
- 服务直接调用
- 负载均衡
- Circuit Breakers
- 全局锁
- 主节点选举和集群状态管理
- 分布式消息传递
应用上下文
该模块会在 SpringApplication 或 SpringApplicationBuilder 上添加一个启动层,
Reference
- String Cloud 会在程序上添加一个启动层,使用 boostrap.yml 来控制启动层的行为
- 如果需要程序相关的配置,建议设置
spring.application.name
. - 在启动时设置
spring.cloud.bootstrap.enabled=false
可禁用该启动层. - 启动层负责拿到具体的程序配置,具体配置可以使用不同的配置源.
- Appendix: Compendium of Configuration Properties
bootstrap.yml
spring:
application:
name: foo
cloud:
config:
uri: ${SPRING_CONFIG_URI:http://localhost:8888}
Spring Cloud Netflix Eureka
- Eureka at a glance
- Spring Cloud Netflix Eureka - The Hidden Manual
- Spring Cloud 中,Eureka 常见问题总结
- Eureka Clustering documentation and best practices#203
zuul
- Netflix/zuul
- Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more.
ZuulServlet
- 主要入口
- 负责初始化 RequestContext
- 设置请求和响应对象
- 将请求代理给过滤器处理
- 分文前中后和异常步骤
- 默认会开启 buffer-requests, 将请求体缓存起来
- 响应也是会缓冲起来
RequestContext.getCurrentContext()
- 请求上下文信息
- 线程相关
- 集成自 ConcurrentHashMap ,用于存储额外信息
- 包含请求和响应对象
FilterProcessor.getInstance()
- 核心的过滤处理
FilterLoader.getInstance()
- 加载和编译过滤器
ZuulFilter
- 加载和编译过滤器
ZuulFilter
- 实际处理的过滤器
- 基本属性
- 类型
- error, post, pre, route
- 顺序
- 类型
ZuulFilterResult
执行结果ExecutionStatus
结果状态- SUCCESS(1), SKIPPED(-1), DISABLED(-2), FAILED(-3);
- 异常
- 结果
TracerFactory
- 跟踪调用链
- 扩展
常见问题
无法反向代理 WebSockets
无 法基于域名反向代理
Spring Cloud Netflix Zuul
- 集成 Zuul
- 实现反向代理
- 简化配置
- 实现了很多
ZuulFilter
@EnableZuulProxy
- 主要用于反向代理
ZuulProxyConfiguration
Zuul (Discovery)
特性
@EnableZuulServer
- 通用的 Zuul 服务
Zuul (Simple)
特性
ServiceRouteMapper
- 将 ServiceId 转为路由名
RouteLocator
- 核心的路由定位接口
DiscoveryClientRouteLocator
- 主要实现
- 基于
DiscoveryClient
ProxyRequestHelper
- 反向代理的辅助工具类
- 主要用于构建反向代理的请求
FilterConstants
- 定义主要用到的常量
ZuulFilter
PreDecorationFilter
- 前过滤器
- 设置代理相关的头
- 确定代理的目标
RibbonRoutingFilter
- 通过 ServiceId 反向代理的路过最终会由该过滤器处理, 会构建一个 RibbonCommand 进行执行请求