eureka运行机制

eureka

eureka运行机制

注册

客户端向服务器注册时,会一次次反复注册,知道注册成功为止

拉取

客户端每30秒拉取一次注册表,更新本地注册表缓存

心跳

客户端每30秒发送一次心跳数据,服务器连续三次收不到一个服务的心跳,就会把这个服务从注册表中删除

自我保护模式

  • 在网络中断时,15分钟内,85%服务器出现心跳异常(一次心跳停止叫心跳异常),自动进入自我保护模式
  • 保护模式下,保护所有注册信息都不删除
  • 网络恢复后,可以自动退出保护模式
  • 开发调试期间,可以禁用保护模式,这样避免影响测试

客户端连接eureka

修改2,3,4
1.添加eureka clien依赖
2.yml配置eureka地址

  • http://eureka1:2001/eureka

3.修改hosts,添加eureka1和eureka2

  • win+r ,输入drivers
  • 进入etc目录,找到hosts文件
  • 用管理员运行启动编辑器,修改hosts文件
    在这里插入图片描述

高可用

商品的高可用

1.修改item的启动配置,添加springboot启动参数:--server.port=8001
在这里插入图片描述

2.复制启动配置类,修改端口8002
在这里插入图片描述

eureka 高可用

1、添加eureka1和eureka2
在这里插入图片描述

Feign集成的Ribbon

Ribbon负载均衡

Feign 集成Ribbon,默认启动负载均衡

Ribbon重试

  • 调用后台服务时,如果失败可以自动发起重试调用
    - 出现异常
    - 调用超时
    - 服务器宕机
  • Feign集成Ribbon,默认启动了重试
  • 重试参数:
    • ribbon.MaxAutoRetries 单台服务器的重试次数,默认是0
    • ribbon.MaxAutoRetriesNextServer 更换服务器的次数,默认是1
    • ribbon.ReadTimeout 默认1000毫秒超时
    • ribbon.ConnectTimeout 与后台服务器建立连接的超时时间,默认1000
    • ribbon.OkToRetryOnAllOperations 是否对所有请求方式都重试,默认只对Get重试
      为什么不对post重试,因为post基本都是对数据进行增删改的操作,如果重试可能导致重复的修改数据、删除数据,因为他可能过一会就操作成功了

zuul网关

统一入口

统一的权限校验

zuul的过滤器 ZuulProxy,可以过滤客户端请求,在过滤器中可以检查访问权限

测试:
http://localhost:3001/item-service/asfdgh4s --没有登录,不允许访问
http://localhost:3001/item-service/asfdgh4s?token=asfdgh4s --已登录,可以访问
1.新建过滤器类 --AccessFilter 按照zuul规则实现 继承ZuulFilter
2.添加注解:@Component 自动扫描自动创建实例

  • zuul的自动配置,会在spring容器中发现过滤器实例,完成自动配置

3.过滤器的类型:pre前置过滤器,routing路由过滤器,post后置过滤器,error错误过滤器

4.通过顺序号来设置过滤器放在哪个位置

5.过滤代码–用来检查权限
代码演示:

package cn.tedu.sp06.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

@Component
public class AccessFilter extends ZuulFilter {
    // 设置过滤器的类型:pre前置过滤器,routing路由过滤器,post后置过滤器,error错误过滤器
    @Override
    public String filterType() { //设置成前置过滤器
//        return "pre";
        return FilterConstants.PRE_TYPE;// 和上面的return没什么区别
    }

    // 设置顺序号
    @Override
    public int filterOrder() {
        // 前置过滤器中有5个默认的过滤器,自定义过滤器放在末尾
        return 6;
    }

    /**
     * 针对当前请求,是否要执行下面的过滤代码
     * */
    @Override
    public boolean shouldFilter() {
        /**
         * 调用商品需要判断权限,
         * 调用用户或订单不检查权限(不考虑业务的合理性,只完成功能的测试)
         * */

        // 获得一个请求上下文对象
        RequestContext ctx = RequestContext.getCurrentContext();
        // 从上下文对象获得调用的后台服务的serviceId
        String serviceId = (String) ctx.get(FilterConstants.SERVICE_ID_KEY);//获取"serviceId"
        // 如果调用的是 item-service,返回true
        return "item-service".equals(serviceId);
    }

    // 过滤代码   --是用来检查权限
    @Override
    public Object run() throws ZuulException {
        // http://localhost:3001/item-service/asfdgh4s?token=asfdgh4s
        // 获得上下文对象
        RequestContext ctx = RequestContext.getCurrentContext();
        // 获得 request 对象
        HttpServletRequest request = ctx.getRequest();
        // 接收token参数
        String token = request.getParameter("token");
        // 如果token 不存在
//        if (token==null||"".equals(token))
        if (StringUtils.isBlank(token)){
            // 阻止继续调用
            ctx.setSendZuulResponse(false);
            // 直接返回响应
            // jsonResult --> {code:400,msg:"未登录",data:null}
            String json = JsonResult.build()
                    .code(400)
                    .msg("Not Login! 未登录!")
                    .toString();
            ctx.addZuulResponseHeader(
                    "Content-Type","application/json;charset=UTF-8");
            ctx.setResponseBody(json);
        }
        return null; // zuul当前版本这个返回值不起任何作用
    }
}

Zuul集成Ribbon

1.负载均衡默认启用
2.重载默认禁用
在最前面重试,可能造成后台服务器大面积压力倍增,大面积出现故障
3.启用重试

  • 添加spring-retry依赖
  • yml配置重用重试: ‘zuul.retryable=true’
  • 如果需要可以配置重试参数

Zuul集成Hystrix

Hystrix是容错和限流工具

  • Hystrix容错:降级
  • Hystrix限流:熔断

Zuul网关实现使用Hystrix 进行容错处理,执行降级

Zuul 默认已经启用Hystrix,任何基础配置都不用做
调用后台数据失败,执行前面模块中的降级代码,向客户端返回降级结果

  • 错误提示
  • 缓存数据
  • 根据业务逻辑,返回任何结果都可以

1.新建降级类 ItemFB,实现FallvackProvider接口
2.添加注解@Component

  • zuul的自动配置,可以自动发现降级类实例,完成自动配置

Zuul集成Hystrix实现限流,熔断

当流量过大,后台服务出现故障,可以断开链路,限制后台故障服务的流量,等待它冲故障中恢复

  • 断路器打开条件:
    10秒20次请求(必须首先满足)
    50%请求出错,执行了代码降级
  • 断路打开后,会进入半开状态
    在半开状态下,会向后台

Turbine

从多台服务器聚合Hystrix监控数据,Hystrix dashboard仪表盘可以从Turbine抓取聚合后的日志数据
在这里插入图片描述

创建本地仓库

已经创建过仓库的不要重复创建
1.vcs --create git repository
(double shift 搜索create git repository)
2.选择springcloud1工程作为仓库目录
3.把代码提交到本地仓库
ctrl+k 或 点右上角勾按钮
选择所有文件,填写提交信息完成提交

本地仓库推送到远程仓库

已经有远程仓库的不需要重复创建
1.gitee 中点加号下拉菜单,新建仓库
2.仓库名称:springcloud1
3.设置成开源仓库
4.创建完成后,复制仓库地址
5.推送
ctrl+shift+k
或点右上角向上箭头按钮
6.点define remote链接,粘贴gitee仓库地址,完成推送

搭建配置中心

1.新建 spring模块 sp09-config
2.添加依赖:eureka client,config server
3.yml

# git仓库地址:https://gitee.com/yly451516725/springcloud1.git
# 存放配置文件的目录:config

4.启动类注解 @EnableConfigServer
5.访问验证:

  • http://localhost:6001/item-server-dev
  • http://localhost:6001/user-server-dev
  • http://localhost:6001/order-server-dev

VMware

1.16.x
2.NAT网络的网段使用192.168.64.0
编辑–虚拟网络编辑器 – 选择vmnet8 - 左下角修改 ‘192.168.64.0’
3.上面虚拟机中已经做了基本基础配置
- yun安装源、扩展源使用阿里云服务器
- 安装python、pip、ansible
- 添加了两个脚本文件

  • ip-static - 配置固定ip
  • ip-dhcp - 自动获取ip

1.解压centos-8-215
2.双击 centos-8-2105.vmx加载镜像
3.启动,按提示选择“已复制虚拟机”
4.如果提示“硬件兼容性”,右键点虚拟机,管理,修改硬件兼容性,改成自己的vnware
5.登录用户名密码都是root

Rabbitmq

消息队列
消息服务器
消息中间间 Borker

  • Rabbitmq
  • Activemq
  • Rocketmq
  • Kafka
  • Tubemq
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

眸中星河万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值