服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 详解Spring Cloud Zuul 服务网关

详解Spring Cloud Zuul 服务网关

2021-03-06 13:21钟艾伶 Java教程

本篇文章主要介绍了详解Spring Cloud Zuul 服务网关,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

有了eureka服务注册发现、hystrix断路器、ribbon服务调用负载均衡,以及spring cloud config 集群配置中心,似乎一个微服务框架已五脏俱全,last but not least,一个服务网关却不可或缺。

spring cloud zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。zuul是netflix出品的一个基于jvm路由和服务端的负载均衡器。

zuul介绍

详解Spring Cloud Zuul 服务网关

在整个spring cloud微服务框架里,zuul扮演着”智能网关“的角色。一方面,zuul是接入网关,起到反向代理的作用,是外部消费者请求内部服务的唯一入口。另一方面,zuul也具备过滤功能,通过在运行时注入过滤规则可实现用户鉴权、动态路由、灰度发布、a/b测试、负载限流等功能。

zuul的大部分功能都是通过过滤功能来完成的,zuul可以提供四种标准类型的过滤,如下图所示:

详解Spring Cloud Zuul 服务网关

1) pre: 过滤规则在路由之前起作用。可以利用“pre”过滤器实现用户鉴权,记录请求日志等;

2) routing:过滤规则在路由时发生作用。可以利用“routing”过滤器实现动态路由、灰度发布、a/b测试、负载限流等。

3) post:过滤规则在路由之后发生作用。可以利用"post"过滤器收集统计信息和指标,将微服务的相应写入http响应并返回给服务消费者;

4) error:过滤规则路由过程中发生错误时发生作用。可以利用error过滤器记录错误日志,并对错误进行二次处理等。

在过滤器之间用requestcontext传递消息。requestcontext存储的内容包括路由目标地址、错误信息、请求信息、响应信息等。zuul的过滤规则也可以用基于jvm的语言编写,包括java、python、groovy等。

一、zuul 实例

在上篇demo创建好注册中心、服务提供方的基础之上,再来演示一下zuul网关服务

1、创建网关类 

?
1
2
3
4
5
6
7
8
9
@enablezuulproxy
@springcloudapplication
//整合@springbootapplication、@enablediscoveryclient、@enablecircuitbreaker
public class zuulapplication {
 
  public static void main(string[] args) {
    new springapplicationbuilder(zuulapplication.class).web(true).run(args);
  }
}

2、添加properties配置文件

?
1
2
3
4
5
6
7
8
9
10
spring.application.name=api-gateway
server.port=5555
 
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceid=compute-service
 
zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.serviceid=compute-service
 
eureka.client.serviceurl.defaultzone=http://localhost:1111/eureka/

同样也指向eureka服务注册中心地址,api-a.serviceid,b-serviceid 指向服务提供者名称

3、访问效果

原来直接通过http://compute-service/add?a=10&b=20链接直接访问compute-service服务实例,现在则可直接localhost:5555/api-a/add?a=1&b=2网关地址访问compute-service服务。同样zuul网关也提供服务负载均衡功能,将请求均发到service服务实例。

详解Spring Cloud Zuul 服务网关

二、什么是网关?为何需要使用网关?

通过上图,对外提供的服务,在无网关的情况下,api接口直接暴露给服务调用方,当调用方增多,不同业务调用方各不相同,势必需要添加定制化访问权限、校验等逻辑。当添加api网关后,再第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端,正如无需直接访问compute-service的add方法,而是通过api-a/add链接将请求传递给service实例。zuul就是提供负载均衡-反向代理-权限认证的这么一个api gateway。

类似于nginx在应用服务最前端添加一堵保护墙,zuul的负载均衡是针对将请求分发给集群中某台服务或者某个服务实例。而前面介绍过的ribbon也是主打服务负载功能,它所针对的是服务消费者将调用请求分发到某具体服务提供实例。两者均做负载均衡,实际是在系统不同的层级上进行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/daybreak1209/article/details/53735455

延伸 · 阅读

精彩推荐