1.基础服务代理使用
1.1新建gateway项目,pom文件如下
- <?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>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.1.4.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>net.chengp</groupId>
- <artifactId>gateway</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>gateway</name>
- <description>Demo project for Spring Boot</description>
- <properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
1.2启动类开启zuul代理
- @EnableZuulProxy
1.3启动测试
依次启动注册中心、provider、consumer以及新建的gateway项目,通过gateway访问consumer测试
http://127.0.0.1:40010/consumer/testHystrix
2.自定义路由规则
2.1修改配置文件指定路由规则
- #转发规则
- zuul:
- #忽略所有服务直接访问
- ignored-services: '*'
- #路由设置:服务名对应请求路径,注意路由路径不能相同,否则会被覆盖
- routes:
- provider: /gateway/provider/**
- consumer: /gateway/consumer/**
2.2重启访问
通过两次访问我们可以看到忽略规则以及转发规则都生效了
3.使用zuul做登录拦截及认证
3.1添加登录拦截类
- package net.chengp.gateway.filters;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.lang.StringUtils;
- import org.apache.http.HttpStatus;
- import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
- import org.springframework.stereotype.Component;
- import com.netflix.zuul.ZuulFilter;
- import com.netflix.zuul.context.RequestContext;
- import com.netflix.zuul.exception.ZuulException;
- /**
- * 登录拦截
- *
- */
- @Component
- public class LoginFilter extends ZuulFilter {
- @Override
- public boolean shouldFilter(){
- //ACL 访问控制列表
- RequestContext ctx = RequestContext.getCurrentContext();
- HttpServletRequest request = ctx.getRequest();
- System.out.println("请求地址:"+request.getRequestURI());
- if(request.getRequestURI().isEmpty() || !request.getRequestURI().startsWith("/gateway/login/")){
- //请求地址为空或者不是login服务下面的地址就进行拦截
- return true;
- }else {
- return false;
- }
- }
- @Override
- public Object run() throws ZuulException {
- //这里执行被拦截请求的业务逻辑,可使用JWT进行认证 json web token
- RequestContext ctx = RequestContext.getCurrentContext();
- HttpServletRequest request = ctx.getRequest();
- String token = request.getHeader("token");
- // token为空则在请求参数中拿
- if(StringUtils.isBlank(token)){
- token = request.getParameter("token");
- }
- if(StringUtils.isBlank(token)){
- ctx.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);//设置为401未认证
- ctx.setSendZuulResponse(false);
- }
- return null;
- }
- @Override
- public String filterType(){
- /**
- * PRE_TYPE 前置
- * POST_TYPE 后置
- * ROUTE_TYPE 执行路由
- * ERROR_TYPE 异常
- */
- return FilterConstants.PRE_TYPE;
- }
- @Override
- public int filterOrder(){
- //放在解码前执行
- return FilterConstants.PRE_DECORATION_FILTER_ORDER;
- }
- }
3.2重启测试
带上token后可正常访问
4.使用zuul做服务限流
4.1添加服务限流拦截类
- package net.chengp.gateway.filters;
- import org.apache.http.HttpStatus;
- import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
- import org.springframework.stereotype.Component;
- import com.google.common.util.concurrent.RateLimiter;
- import com.netflix.zuul.ZuulFilter;
- import com.netflix.zuul.context.RequestContext;
- import com.netflix.zuul.exception.ZuulException;
- @Component
- public class RateLimitFilter extends ZuulFilter{
- private static final RateLimiter rateLimit = RateLimiter.create(1);//多实例下该值需要除以实例数
- @Override
- public boolean shouldFilter(){
- //这里可以引入ACL
- return true;
- }
- @Override
- public Object run() throws ZuulException {
- if(!rateLimit.tryAcquire()){//没拿到令牌就不继续执行
- RequestContext.getCurrentContext().setSendZuulResponse(false);
- RequestContext.getCurrentContext().setResponseStatusCode(HttpStatus.SC_BAD_REQUEST);
- }
- return null;
- }
- @Override
- public String filterType(){
- return FilterConstants.PRE_TYPE;
- }
- @Override
- public int filterOrder(){
- return -4;//最先执行
- }
- }
4.2重启测试
尝试快速刷新页面访问则返回400
相关推荐
SpringCloud API网关zuul ,路由规则写在配置文件中。为了便于修改,把配置文件放到配置文件中心。使用springcloud config .后期可以使用携程的阿波罗 可视化操作界面 并且是中文的。
SpringCloud Zuul是基于Spring Cloud框架的一个核心组件,它扮演着API网关的角色,负责路由转发、过滤器处理以及安全控制等任务。Zuul的主要功能包括动态路由、过滤器机制、安全控制、负载均衡、健康检查等。下面将...
SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...
Spring Cloud 服务网关Zuul的实现 Spring Cloud 服务网关Zuul是Netflix开源的API网关组件,用于管理和路由API流量。Zuul提供了灵活的路由、过滤和安全机制,帮助开发者快速构建高性能、高可用性的API网关。 服务...
springcloud入门代码基于Spring Cloud实现的服务网关Zuul源代码 安装教程 Zuul pom.xml <groupId>org.springframework.cloud <artifactId>spring-cloud-starter-netflix-zuul application.yml server:...
Spring Cloud 使用 Zuul 实现 API 网关服务问题 在本文中,我们将主要介绍如何使用 Spring Cloud 的 Zuul 组件来实现 API 网关服务问题。 Zuul 是一个基于 Netflix Zuul 的 API 网关组件,它可以解决路由规则和服务...
springcloud zuul 网关开发实践,模拟了在Spring Cloud微服务系统中,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服的实现过程。
**Zuul** 是Spring Cloud的一部分,作为一个边缘服务,它充当了微服务架构的入口网关。Zuul的主要功能包括路由转发、过滤器处理、负载均衡、熔断和限流等。在单点登录场景中,Zuul可以拦截所有请求,检查请求是否...
SpringCloud中集成Zuul网关。 添加相关依赖,编写路由地址,添加过滤器可以在过滤器中对请求做其他操作 如验证是否登录、解密请求中的数据等
综上所述,这个项目利用SpringCloud的组件构建了一个具备服务发现、动态路由、负载均衡的微服务系统,通过Eureka管理服务注册,Zuul处理外部请求的路由,Feign简化了服务间调用,共同构建出高效、可扩展的微服务架构...
SpringCloud-2.0-service-zuul-80 代表了Zuul服务网关,它是所有微服务请求的统一入口。Zuul的主要职责有: 1. 路由转发:根据请求路径将请求转发到对应的服务提供者,实现服务间的解耦。 2. 访问过滤:Zuul提供了...
SpringCloud Zuul是Spring Cloud生态系统中的一个边缘服务和API网关组件。它的主要功能是作为微服务架构中的统一入口,负责路由转发、过滤器处理、负载均衡以及安全控制等任务。Zuul允许开发者在微服务架构中实现...
SpringCloud 网关组件 Zuul 实例解析 SpringCloud 网关组件 Zuul 是一个基于 Netflix 的 Zuul 项目,提供了动态路由、监控、安全、有限流控等功能。 Zuul 实例解析是 SpringCloud 网关组件 Zuul 的一个重要组件,它...
Spring Cloud Zuul网关 Spring Cloud Zuul网关是微服务架构中的一种网关解决方案,主要用于解决微服务之间的调用和路由问题。在本章节中,我们将了解Zuul网关的基本概念和使用方法,以及如何将其应用于微服务架构...
SpringCloud Zuul网关功能实现解析 SpringCloud Zuul网关功能实现解析是基于 SpringCloud 生态系统的微服务架构中的一种网关解决方案。 Zuul 是 Netflix 公司开源的一个基于 Java 的 API Gateway 项目,旨在提供一...
Spring Cloud网关Zuul是微服务架构中常用的边缘服务组件,用于提供路由、过滤等功能,实现对API的集中式管理。Zuul的主要优点在于能够统一处理跨服务的公共逻辑,如认证、限流、监控等,减轻了每个微服务自身的负担...
在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡器(如Zuul、Nginx),然后到达服务网关(Zuul集群),最终路由到具体的服务实例。服务实例统一注册到高可用的服务注册中心...
在给定的压缩包文件中,`EureKaserver` 可能是关于Eureka服务发现的配置或示例,`SpringCloud-Service` 可能包含了一个或多个微服务实例,而`SpringCloud-Zuul` 很可能包含了Zuul 网关的配置和服务。通过这些组件的...
在SpringCloud生态中,Zuul是一个重要的组件,它作为边缘服务或者说是API网关,承担着路由转发和过滤器的角色。下面将详细阐述Zuul在SpringCloud中的应用及其关键知识点。 1. **Zuul的基本概念** Zuul是由Netflix...