zuul

API网关

	- 后台服务统一调用入口
	-   转发的路由规则
zuul:
  routes:
    # 远程服务: 调用路径
    #  配置的是默认规则,不配置也可以自动配置
    #  如果不配置,可以根据注册表自动配置
    item-service: /item-service/**
    user-service: /user-service/**
    oredr-service: /order-service/**
  • 主启动类添加@EnableZuulProxy注解

统一的权限校验

通过继承ZuulFilter过滤器,来实现权限判断

http://localhost:3001/item-service/y4y5y4 没登录阻止访问
http://localhost:3001/item-service/y4y5y4?token=sds5556 已登录允许访问

package cn.tedu.sp11.filter;

import cn.tedu.sp01.util.JsonResult;
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 sun.misc.Request;

import javax.servlet.http.HttpServletRequest;

/*
* 自定义zuul过滤器,只需要添加@Component注解
* zull会自动配置这个过滤器
* */
@Component
public class AccessFiltre extends ZuulFilter {
    //前置,后置,路由,错误处理
    @Override
    public String filterType() {
        // return "pre"
        return FilterConstants.PRE_TYPE;
    }
    //顺序号
    @Override
    public int filterOrder() {
        return 6;
    }
    //针对当前请求,是否要执行过滤代码
    @Override
    public boolean shouldFilter() {
    /*
    *  如果请求商品,执行过滤
    * 如果请求用户或订单,跳过过滤
    * */
        //获取请求上下文对象
        RequestContext ctx = RequestContext.getCurrentContext();
        //获取调用的服务id
        String serviceId =(String) ctx.get(FilterConstants.SERVICE_ID_KEY);


        return "item-service".equalsIgnoreCase(serviceId);
    }
    //过滤代码,权限判断
    @Override
    public Object run() throws ZuulException {
        //判断请求中有没有token信息
        //获取request对象
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        //接受token参数

        String token= request.getParameter("token");
        //如果没有token
        if (StringUtils.isBlank(token)) {

            //阻止继续访问
            ctx.setSendZuulResponse(false);
            //直接返回响应
            //JsonResult ---{code:200,msg:"xxx",data:null}

            ctx.setResponseStatusCode(JsonResult.NOT_LOGIN);
            ctx.addZuulResponseHeader("content-Type", "application/json;");
            ctx.setResponseBody(JsonResult.err().code(JsonResult.NOT_LOGIN).msg("not login").toString());
        }

        return null; //zull当前版本中,这个返回值没有使用,不发挥任何作用,返回任何数据都无效
    }
}

zuul集成ribbon

默认启用了负载均衡,但没有启用重试

启用重试

  1. 添加spring-retry依赖
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
  1. zuul.retryable=true
# zuul 路由转发规则
zuul:
  routes:
    item-service: /item-service/**
    user-service: /user-service/**
    order-service: /order-service/**
  retryable: true  #启用重试

  1. 有默认重试参数
飞思卡尔智能车竞赛是一项备受关注的科技赛事,旨在激发学生的创新和实践能力,尤其是在嵌入式系统、自动控制和机器人技术等关键领域。其中的“电磁组”要求参赛队伍设计并搭建一辆能够自主导航的智能车,通过电磁感应线圈感知赛道路径。本压缩包文件提供了一套完整的电磁组智能车程序,这是一套经过实战验证的代码,曾在校级比赛中获得第二名的优异成绩。 该程序的核心内容可能涉及以下关键知识点: 传感器处理:文件名“4sensor”表明车辆配备了四个传感器,用于获取环境信息。这些传感器很可能是电磁感应传感器,用于探测赛道上的导电线圈。通过分析传感器信号的变化,车辆能够判断自身的行驶方向和位置。 数据采集与滤波:在实际运行中,传感器读数可能受到噪声干扰,因此需要进行数据滤波以提高精度。常见的滤波算法包括低通滤波、高斯滤波和滑动平均滤波等,以确保车辆对赛道的判断准确无误。 路径规划:车辆需要根据传感器输入实时规划行驶路径。这可能涉及PID(比例-积分-微分)控制、模糊逻辑控制或其他现代控制理论方法,从而确保车辆能够稳定且快速地沿赛道行驶。 电机控制:智能车的驱动通常依赖于直流电机或无刷电机,电机控制是关键环节。程序中可能包含电机速度和方向的调节算法,如PWM(脉宽调制)控制,以实现精准的运动控制。 嵌入式系统编程:飞思卡尔智能车的控制器可能基于飞思卡尔微处理器(例如MC9S12系列)。编程语言通常为C或C++,需要掌握微控制器的中断系统、定时器和串行通信等功能。 软件架构:智能车软件通常具有清晰的架构,包括任务调度、中断服务程序和主循环等。理解和优化这一架构对于提升整体性能至关重要。 调试与优化:程序能够在比赛中取得好成绩,说明经过了反复的调试和优化。这可能涉及代码效率提升、故障排查以及性能瓶颈的识别和解决。 团队协作与版本控制:在项目开发过程中,团队协作和版本控制工具(如Git)的应用不可或缺,能够保
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值