`

SpringCloudb2b2c电子商务 路由网关(zuul)

阅读更多

一、Zuul简介

Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop

转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。

 

zuul有以下功能:

 

  • Authentication

  • Insights

  • Stress Testing

  • Canary Testing

  • Dynamic Routing

  • Service Migration

  • Load Shedding

  • Security

  • Static Response handling

  • Active/Active traffic management

二、准备工作

继续使用上一节的工程。在原有的工程上,创建一个新的工程。

 

三、创建service-zuul工程

其pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.forezp</groupId>
    <artifactId>service-zuul</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>service-zuul</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>com.forezp</groupId>
        <artifactId>sc-f-chapter5</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
    </dependencies>
</project>

 在其入口applicaton类加上注解@EnableZuulProxy,开启zuul的功能:

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

 加上配置文件application.yml加上以下的配置代码:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8769
spring:
  application:
    name: service-zuul
zuul:
  routes:
    api-a:
      path: /api-a/**
      serviceId: service-ribbon
    api-b:
      path: /api-b/**
      serviceId: service-feign

 首先指定服务注册中心的地址为http://localhost:8761/eureka/,服务的端口为8769,服务名为service-zuul;以/api-a/ 开头的请求都转发给service-ribbon服务;以/api-b/开头的请求都转发给service-feign服务;

 

依次运行这五个工程;打开浏览器访问:http://localhost:8769/api-a/hi?name=forezp ;浏览器显示:

 

hi forezp,i am from port:8762

 

打开浏览器访问:http://localhost:8769/api-b/hi?name=forezp ;浏览器显示:

 

hi forezp,i am from port:8762

 

这说明zuul起到了路由的作用

四、服务过滤

zuul不仅只是路由,并且还能过滤,做一些安全验证。继续改造工程;

@Component
public class MyFilter extends ZuulFilter {
    private static Logger log = LoggerFactory.getLogger(MyFilter.class);
    @Override
    public String filterType() {
        return "pre";
    }
    @Override
    public int filterOrder() {
        return 0;
    }
    @Override
    public boolean shouldFilter() {
        return true;
    }
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));
        Object accessToken = request.getParameter("token");
        if(accessToken == null) {
            log.warn("token is empty");
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            try {
                ctx.getResponse().getWriter().write("token is empty");
            }catch (Exception e){}
            return null;
        }
        log.info("ok");
        return null;
    }
}

 filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:

pre:路由之前

routing:路由之时

post: 路由之后

error:发送错误调用

filterOrder:过滤的顺序

shouldFilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。

run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。

这时访问:http://localhost:8769/api-a/hi?name=forezp ;网页显示:

 

token is empty

 

访问 http://localhost:8769/api-a/hi?name=forezp&token=22 ;

网页显示:

 

hi forezp,i am from port:8762

 

分享到:
评论

相关推荐

    SpringCloud之六 路由网关zuul

    Spring Cloud微服务架构中,Zuul作为路由网关起着至关重要的作用。Zuul网关是Netflix开源的Java编写的API网关服务,它能够帮助我们实现路由转发、过滤器功能,简化了服务的动态路由、监控、弹性、安全性的处理。在...

    华为-微服务路由网关-Zuul-实战作业

    华为微服务路由网关Zuul实战作业的知识点主要涵盖了微服务架构下使用Zuul作为反向代理和路由网关的全过程,详细包括了Zuul网关的配置、使用以及与Eureka服务注册与发现的整合,还涉及了如何在华为云DevCloud平台上...

    【微服务架构】SpringCloud之路由网关(zuul)

    在微服务架构中,Spring Cloud Zuul 是一个重要的组件,它作为边缘服务或者说是路由网关,承担着请求分发、过滤以及安全控制等职责。本文将深入探讨Spring Cloud Zuul 的核心概念、功能和使用方法。 首先,Zuul 是 ...

    zuul网关登陆鉴权/动态路由

    Zuul 是 Netflix 开源的一款基于 Java 的边缘服务框架,它主要用作微服务架构中的 API 网关。API 网关是系统对外的统一入口,负责路由、过滤、安全控制、负载均衡等任务。在本文中,我们将深入探讨 Zuul 在企业级...

    springcloud入门代码基于Spring Cloud实现的服务网关Zuul源代码

    springcloud入门代码基于Spring Cloud实现的服务网关Zuul源代码 安装教程 Zuul pom.xml &lt;groupId&gt;org.springframework.cloud &lt;artifactId&gt;spring-cloud-starter-netflix-zuul application.yml server:...

    SpringCloud(zuul路由网关)

    在SpringCloud生态中,Zuul是一个重要的组件,它作为边缘服务或者说是API网关,承担着路由转发和过滤器的角色。下面将详细阐述Zuul在SpringCloud中的应用及其关键知识点。 1. **Zuul的基本概念** Zuul是由Netflix...

    22-Spring Cloud网关Zuul&过滤器&集群方案1

    Spring Cloud网关Zuul是微服务架构中常用的边缘服务组件,用于提供路由、过滤等功能,实现对API的集中式管理。Zuul的主要优点在于能够统一处理跨服务的公共逻辑,如认证、限流、监控等,减轻了每个微服务自身的负担...

    05_SpringCloud API网关zuul.md

    SpringCloud API网关zuul ,路由规则写在配置文件中。为了便于修改,把配置文件放到配置文件中心。使用springcloud config .后期可以使用携程的阿波罗 可视化操作界面 并且是中文的。

    springcloud教程之zuul路由网关的实现

    Spring Cloud之 Zuul 路由网关实现详解 Spring Cloud是一款基于微服务架构的开发框架,它提供了许多实用的功能模块, Zuul 路由网关便是其中之一。 Zuul 路由网关是一个基于 Netfix 的开源项目,主要用于提供微服务...

    《深入理解Spring Cloud与微服务构建》学习笔记(十八)~路由网关Spring Cloud Zuul~熔断器

    在深入探讨Spring Cloud和微服务构建的过程中,Spring Cloud Zuul是一个关键组件,它扮演着路由网关和熔断器的角色。本文将详细讲解Zuul的功能、原理以及如何在Spring Boot应用中集成和配置。 首先,Spring Cloud ...

    zuul网关配置参考

    在微服务架构中,Zuul 是一个非常重要的组件,它作为边缘服务或者API网关,负责处理所有来自客户端的请求,并将这些请求路由到相应的微服务。Spring Boot 结合 Zuul 可以轻松实现这一功能,使得微服务架构更加灵活和...

    spring-cloud-zuul(包含注册中心、服务生产者、服务消费者、zuul网关路由).zip

    三、Zuul网关路由 SpringCloud-2.0-service-zuul-80 代表了Zuul服务网关,它是所有微服务请求的统一入口。Zuul的主要职责有: 1. 路由转发:根据请求路径将请求转发到对应的服务提供者,实现服务间的解耦。 2. ...

    《深入理解Spring Cloud与微服务构建》学习笔记(十七)~路由网关Spring Cloud Zuul~负载均衡

    在本篇学习笔记中,我们将深入探讨Spring Cloud框架中的一个重要组件——Spring Cloud Zuul,它作为微服务架构中的路由网关和负载均衡器。Spring Cloud是基于Java的微服务工具集,它为开发者提供了在分布式系统(如...

    《深入理解Spring Cloud与微服务构建》学习笔记(十六)~路由网关Spring Cloud Zuul

    在本篇学习笔记中,我们将深入探讨Spring Cloud框架中的一个重要组件——Spring Cloud Zuul,它是一个强大的路由网关。Zuul的主要职责是为微服务架构提供统一的入口,进行请求过滤、路由转发等操作,使得后端服务对...

    Spring Cloud 服务网关Zuul的实现

    Spring Cloud 服务网关Zuul是Netflix开源的API网关组件,用于管理和路由API流量。Zuul提供了灵活的路由、过滤和安全机制,帮助开发者快速构建高性能、高可用性的API网关。 服务网关的要素 服务网关是微服务架构中...

    第六章 SpringCloud Zuul网关.pdf

    Spring Cloud Zuul网关是微服务架构中的一种网关解决方案,主要用于解决微服务之间的调用和路由问题。在本章节中,我们将了解Zuul网关的基本概念和使用方法,以及如何将其应用于微服务架构中。 Zuul网关的主要...

    zuul网关demo

    在本文中,我们将深入探讨"zuul网关demo",这是一个基于Spring Boot和Zuul构建的微服务网关的示例项目。Spring Boot简化了Java应用的开发过程,而Zuul是Netflix OSS平台的一部分,它作为一个边缘服务提供动态路由、...

    springcloud zuul网关服务

    SpringCloud Zuul是基于Spring Cloud框架的一个核心组件,它扮演着API网关的角色,负责路由转发、过滤器处理以及安全控制等任务。Zuul的主要功能包括动态路由、过滤器机制、安全控制、负载均衡、健康检查等。下面将...

    23-Spring Cloud网关&负载均衡 Zuul&Ribbon1

    Zuul 是 Netflix 公司开源的一种基于 JVM 的网关组件,负责处理外部请求并将其路由到正确的微服务实例上。 Zuul 提供了多种功能,如身份验证、限流、熔断、路由等。 Zuul 的主要特点是: * 路由: Zuul 可以根据...

Global site tag (gtag.js) - Google Analytics