SpringCloud微服务网关Zuul的作用是什么

发布时间:2022-07-18 10:13:27 作者:iii
来源:亿速云 阅读:488

这篇文章主要介绍“SpringCloud微服务网关Zuul的作用是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud微服务网关Zuul的作用是什么”文章能帮助大家解决问题。

网关的作用

微服务架构中,服务实例的地址可能经常会发生变化,所以我们不能直接将服务的地址暴露出来。如果每一个微服务都直接暴露接口,会导致一系列的问题,比如调用过于复杂,涉及到账户、权限不能统一处理等。另外基于高内聚低耦合的设计准则来讲,我们也应该将内部系统和外部系统做切割。

因此,这时就需要有一个独立的组件来处理外部的请求,这个组件就是服务网关。服务网关就是为了简化前端的调用逻辑,通常情况下也会实现相关的认证逻辑,根据外部不同的请求响应不同的数据,从而简化内外部系统之间调用的复杂度。

SpringCloud微服务网关Zuul的作用是什么

服务网关负责服务请求路由、组合及协议转换。客户端的所有请求都首先经过服务网关,然后由它将请求路由到合适的微服务。服务网关经常会通过调用多个微服务并合并结果来处理一个请求,它可以在系统外部与内部响应之间友好的转换。

本文将先着重介绍Zuul组件。

Spring Cloud 网关组件Zuul介绍

Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件。Zuul 接收所有外来请求,并将请求转发到对应的后端服务。作为一个前置服务,Zuul 旨在实现动态路由,监控,弹性和安全性等功能。

Zuul 提供了不同类型的 filter 用于处理请求,这些 filter 可以让我们实现以下功能:

Zuul网关实战

之前的介绍中,我们启动了注册中心registry,dms服务,和app服务,请求时,直接调用了app服务的接口,app服务又调用了dms服务:

SpringCloud微服务网关Zuul的作用是什么

加上网关服务之后,就会变成如下:

SpringCloud微服务网关Zuul的作用是什么

接下来,我们创建zuul服务:

1、创建服务

创建子模块zuul,pom.xml引入eureka-client 和zuul的依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- feign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- zuul路由 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

2、创建配置文件

server:
  port: 8004
spring:
  application:
    name: zuul

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
feign:
  hystrix:
    enabled: true
zuul:
  routes:
    app: #活动
      path: /app/** #配置请求URL的请求规则
      serviceId: app #指定Eureka注册中心中的服务id
    dms: #活动
      path: /dms/** #配置请求URL的请求规则
      serviceId: dms #指定Eureka注册中心中的服务id
logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'

3、创建Zuul过滤器

public class MyZuulFilter extends ZuulFilter {
//    pre :可以在请求被路由之前调用
//    route :在路由请求时候被调用
//    post :在route和error过滤器之后被调用
//    error :处理请求时发生错误时被调用
    @Override
    public String filterType() {
        return "pre";// 前置过滤器
    }
    //通过int值来定义过滤器的执行顺序,优先级为0,数字越大,优先级越低
    @Override
    public int filterOrder() {
        return 0;
    }
    //返回一个boolean类型来判断该过滤器是否要执行,所以通过此函数可实现过滤器的开关
    @Override
    public boolean shouldFilter() {
        return true;//此处为true,说明需要过滤
    }
    //过滤器的具体逻辑。
    @Override
    public Object run() throws ZuulException {
        // 获取上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String accessToken = request.getParameter("accessToken");
        if (StringUtils.isEmpty(accessToken)) {
            //setSendZuulResponse(false)令zuul过滤该请求,不进行路由
            currentContext.setSendZuulResponse(false);
            //设置返回的错误码
            currentContext.setResponseStatusCode(401);
            currentContext.setResponseBody("AccessToken is null");
            return null;
        }
        System.out.println("获取到AccessToken为:"+accessToken);
        // 否则正常执行业务逻辑.....
        return null;
    }
}

4、编写启动类

注意增加@EnableZuulProxy注解

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

5、启动验证

这个时候,我们将直接请求app的接口地址,改成网关zuul的地址和端口:http://localhost:8004/app/index

SpringCloud微服务网关Zuul的作用是什么

关于“SpringCloud微服务网关Zuul的作用是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. springcloud 微服务的 Zuul 配置
  2. SpringCloud微服务(05):Zuul组件,实现路由网关控制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springcloud zuul

上一篇:pandas删除部分数据后重新生成索引如何实现

下一篇:SpringCloud微服务网关Gateway怎么创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》