您的位置:首页 > 编程语言 > Java开发

SpringCloud微服务实战之网关服务zuul

2017-12-21 16:18 956 查看
Spring Cloud Zuul同样是基于NetFlix Zuul实现的API网关组件。主要用于解决1.对于路由规则和服务实例的维护问题。2.对于类似签名校验、登录校验在微服务架构中的冗余问题。

一、构建网关

1、新建Maven项目SpringCloud-zuul



2、在pom中添加zuul依赖

<!-- add zuul depend -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>


spring-cloud-starter-zuul该模块不仅包含了Netflix Zuul的核心依赖zuul-core,还包含下面的依赖:spring-cloud-starter-hystrix、spring-cloud-starter-ribbon、spring-cloud-starter-actuator。

3、使用注解@EnableZuulProxy开启Zuul的API网关注解。

4、配置application.properties文件

server.port=9000

spring.application.name=api-geteway
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/


二、请求路由

1、传统路由方式

zuul.routes.api-a-url.path=/api-a-url/**

zuul.routes.api-a-url.url=http://localhost:9888

2、面向服务的路由

为了与Eureka整合,需要添加Eureka依赖

zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=helloservice

zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.serviceId=feignconsumer




三、请求过滤

请求路由建立之后,客户端可以通过统一的API网关接口访问服务,但是不同的客户端的访问权限有差异,所以需要过滤请求。

zuul提供了ZuulFilter来实现过滤和拦截,我们只需要继承ZuulFilter类并实现他定义的4个抽象函数就可以实现过滤了。

package com.spring.springcloud.filter;

import com.netflix.zuul.ZuulFilter;

public class MyFilter extends ZuulFilter {

@Override
public Object run() {
//实现过滤规则
return null;
}

@Override
public boolean shouldFilter() {
return true;
}

@Override
public int filterOrder() {
return 0;
}

@Override
public String filterType() {
return null;
}

}


filterType:过滤器类型,决定过滤器在什么生命周期里执行。

PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。

ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

ERROR:在其他阶段发生错误时执行该过滤器

filterOrder 过滤器执行顺序,当请求一个阶段中存在多个过滤器时,需要根据该方法的返回值来判断执行顺序。

shouldFilter 判断过滤器是否被执行,返回true代表执行。

run 过滤器执行的具体规则。

过滤器定义完成后,还需要再主类中添加如下才能启动过滤器。

@Bean
public MyFilter myFilter(){
return new MyFilter();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: