目录
一、Eureka 注册中心
1、搭建 Eureka 配置中心
2、eureka运行机制
自我保护模式:
客户端连接 eureka
3、高可用
Ⅰ、项目的高可用:
Ⅱ、eureka高可用
4、Feign 远程调用,和 Ribbon 负载均衡和重试
Ⅰ、Feign的远程调用步骤
Ⅱ、Feign 集成的 Ribbon
二、Zuul API网关
1、统一的入口
①新建网关项目模块
②添加依赖:向eureka进行注册并且添加zuul依赖
③配置yml
④启动类注解:@EnableZuulProxy
2、统一的权限校验
1、新建过滤器类:
2、继承接口ZuulFilter(重写里面的方法)
3、zuul的自动配置,会在 spring 容器中发现过滤器实例,完成自动配置
3、Zuul集成Ribbon
4、Zuul 集成 Hystrix
Hystrix的使用
Zuul 网关使用 Hystrix 进行容错处理,执行降级
Zuul 集成 Hystrix 实现限流,熔断
5、Hystrix dashboard
一、Hystrix 使用 Actuator 暴露自己的监控日志
二、暴露Actuator监控指标
三、搭建 Hystrix-dashboard 仪表盘
6、压力测试工具--Apache24
7、TurBine
使用步骤:
一、Eureka 注册中心
以订单模块远程调用用户模块和商品模块。并且向eureka进行注册为背景
1、搭建 Eureka 配置中心1、新建 spring boot项目模块
2、修改pom.xml 添加 eureka server 依赖
3、修改yml文件
①、禁用自我保护模式
②、主机名
③、针对单台服务器,不注册也不拉取
spring: application: name: eureka-server server: port: 2001 eureka: server: enable-self-preservation: false #禁用自我保护模式 instance: hostname: eureka1 client: #对单台服务器不注册不拉取 register-with-eureka: false fetch-registry: false
4、启动类注解: @EnableEurekaServer 通过注解来触发 eureka 服务器的自动配置
5、浏览器访问注册表: http://localhost:2001/
2、eureka运行机制注册:客户端向服务器注册时,会一次次反复注册,直到注册成功为止
拉取:客户端每30秒拉取一次注册表,更新本地的缓存的注册表
心跳:客户端每30秒发送一次心跳数据,服务器连续三次收不到一个服务的心跳, 就会删除该服务
自我保护模式:1、在网络中断时,15分钟内,85%服务器出现心跳异常,自动进入自我保 护模式
2、保护模式下,所有注册信息都不删除
3、网络恢复后,可以自动退出保护模式
4、开发调试期间,可以禁用保护模式,避免影响测试
客户端连接 eureka1、添加 eureka client 依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
2、yml 配置 eureka 地址:http://eureka1:2001/eureka
3、修改 hosts,完成映射。添加 eureka1 和 eureka2
- win+r,输入 drivers
- 进入 etc 目录,找到 hosts 文件
用管理员运行启动编辑器,修改 hosts 文件
127.0.0.1 eureka1
127.0.0.1 eureka2
3、高可用服务器的高可用就是服务器内部设备应用热备份方式(多台相同服务设备同时接受和记录数据),保证提供的服务不中断
Ⅰ、项目的高可用:1、修改服务的启动配置,添加 springboot 启动参数:--server.port=8001
2、复制启动配置,修改端口 8002
Ⅱ、eureka高可用1、添加 eureka1 和 eureka2 的 profile 配置
2、配置启动参数
# eureka1 --spring.profiles.active=eureka1 --server.port=2001 # eureka2 --spring.profiles.active=eureka2 --server.port=2002
3、修改需要向eureka注册的项目,使之可以在两台eureka服务器间切换:
client: service-url: # 可以从云服务商购买不同地点的eureka服务器 #这里可以改成云服务商提供的地点 #自己的eureka服务器只能填写 defaultZone defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka 4、Feign 远程调用,和 Ribbon 负载均衡和重试 Ⅰ、Feign的远程调用步骤
1、添加 feign 依赖
org.springframework.cloud spring-cloud-starter-openfeign
2、启动类添加注解 @EnableFeignClients
3、定义远程调用接口
Ⅱ、Feign 集成的 Ribbon
功能:负载均衡和重试
①Ribbon 负载均衡
Feign 集成 Ribbon,默认启动负载均衡
②Ribbon 重试
调用后台服务时,如果失败可以自动发起重试调用
重试原因: 出异常;调用超时;服务器宕机
Feign 集成 Ribbon,默认启动了重试
重试参数:
ribbon: MaxAutoRetries: 1 # 请求阻塞:单台服务器请求次数 默认0 MaxAutoRetriesNextServer: 2 # 请求阻塞:更换服务器次数次数 默认1 修改为0表示关闭重试功能 #ReadTimeout: 1000 #接受响应的超时,默认1000毫秒超时 #ConnectTimeout: 1000 #与后台服务器建立连接的超时时间,默认1000毫秒 #OkToRetryOnAllOperations: true #是否对所有的请求方式都重试,默认只对get请求方式重试二、Zuul API网关
- 统一的入口
- 统一的权限校验
- 集成 Ribbon
- 集成 Hystrix
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
③配置ymlorg.springframework.cloud spring-cloud-starter-netflix-zuul
zuul: routes: item-service: /item-service //第一步:获得一个请求上下文对象 RequestContext ctx = RequestContext.getCurrentContext(); //第二步:从上下文对象获得调用的后台服务的ServerId String serviceId = (String) ctx.get(FilterConstants.SERVICE_ID_KEY); //第三步:如果调用的item-service,返回true,表示不需要检查权限,false需要检查权限 return "item-service".equals(serviceId); } //过滤规则代码 @Override public Object run() throws ZuulException { //第一步:获得上下文对象 RequestContext ctx = RequestContext.getCurrentContext(); //第二步:获得request对象 HttpServletRequest request = ctx.getRequest(); //第三步:以请求路径种携带token信息为过滤规则,接收token参数。 String token = request.getParameter("token"); //第四步:如果token不存在阻止继续调用 if (StringUtils.isBlank(token)){ //阻止继续调用 ctx.setSendZuulResponse(false); //直接返回响应 String json = JsonResult.build().code(400).msg("Not Login!").toString(); //转成json格式 ctx.addZuulResponseHeader("Content-Type","application/json;charset=UTF-8"); ctx.setResponseBody(json); } return null; //Zuul在当前版本不起任何作用,以后版本更新扩展使用 } }3、Zuul集成Ribbon
①负载均衡默认启用
②重试默认禁用
禁用的原因:在最前面重试,能能造成后台服务器大面积压力倍增,大面积出现故障
③启用重试
添加 spring-retry 依赖
org.springframework.retry spring-retry
yml 配置启用重试: zuul.retryable=true
zuul: retryable: true
如果需要可以配置重试参数
ribbon: MaxAutoRetries: 1 #单台服务器重试次数,全局生效 #针对item—service模块进行单独配置 item-service: ribbon: MaxAutoRetries: 04、Zuul 集成 Hystrix
Hystrix是容错和限流工具
1、Hystrix容错:降级
2、Hystrix限流:熔断
Hystrix的使用- 新建降级类 ItemFB,实现 FallbackProvider 接口
- 添加注解 @Component,交给spring管理
- Zuul的自动配置,可以自动发现降级类实例,完成自动配置
Zuul 默认已经启用Hystrix,任何基础配置都不用做
调用后台服务失败,执行前面模块中的降级代码,向客户端返回降级结果
- 错误提示
- 缓存数据
- 据业务逻辑,返回任何结果都可以
Zuul 集成 Hystrix 实现限流,熔断
当流量过大,后台服务出现故障,可以断开链路,限制后台故障服务的流量,等待它从故障中恢复
- 断路器打开条件:
- 10秒20次请求(必须首先满足)
- 50%请求出错,执行了降级代码
- 这些参数都可自定义
- 断路器打开后,会进入半开状态 在半开状态下,会向后台服务尝试发送一次客户端调用, 调用成功,自动关闭断路器恢复正常, 调用失败,继续保持打开状态
对 Hystrix 降级和熔断的情况进行监控,可以通过监控快速定位故障模块
一、Hystrix 使用 Actuator 暴露自己的监控日志Actuator是 springboot 提供的项目监控指标工具,可以暴露项目的多种监控指标
- 健康状态
- spring容器中所有的对象
- spring mvc 映射的所有路径
- 环境变量
- 堆内存镜像
- .....
1、添加actuator 依赖
org.springframework.cloud spring-cloud-starter-netflix-zuul
2、配置yml
2、配置yml # 暴露 actuator 监控指标 management: endpoints: web: exposure: include: "*" # *表示暴露所有监控指 # health,beans,mappings 表示暴露这3个监控指标 # m.e.w.e.i=hystrix.stream
3、浏览器访问http://localhost:该项目端口/actuator(子路径)/hystrix.stream
看到如下信息,不停的在ping
三、搭建 Hystrix-dashboard 仪表盘作用:图形化展示监控指标
使用步骤:
1、新建 spring 模块: sp07-hystrix-dashboard
2、调整pom.xml,添加 hystrix dashboard
org.springframework.cloud spring-cloud-starter-netflix-hystrix-dashboard
3、配置yml
hystrix: dashboard: proxy-stream-allow-list: localhost #允许抓取服务器列表
4、启动类注解:@EnableHystrixDashboard
5、访问
浏览器访问:http://localhost:4001/hystrix
输入框填入 http://localhost:3001/actuator/hystrix.stream
出现如下页面
6、压力测试工具--Apache24在bin目录下执行cmd,在cmd执行访问命令:
ab -n 20000 -c 50 http://localhost:3001/item-service/35
n表示访问次数共计20000 c表示并发50次(一个时间点上50次)
7、TurBine作用:从多态服务器聚合 Hystrix 监控数据,Hystrix dashboard仪表盘可以从Turbine抓取聚合后的日志数据
使用步骤:①、新建 spring 模块: sp08-turbine
②、pom.xml 添加 eureka client、turbine
org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.cloud spring-cloud-starter-netflix-turbine
③、配置yml
turbine: app-config: zuul #从哪台服务器抓取日志,多个可以使用逗号隔开(aaa,bbb,ccc) cluster-name-expression: new String("default") #服务的id。default为默认id,访问不需要加参数 #如果自定义名字,则访问路径为: https://ip:port/turbine.stream?cluster=[clusterName]
④、启动类注解: @EnalbeTurbine
⑤、访问日志数据: http://localhost:5001/turbine.stream
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)