SpringCl‎oud 使用Zuul构建A‎PI Gat‎eway

来源:kmgdwlc.com   作者:   发表时间:2020-02-18 04:19:03

服务A、B都是暴露出来,供外部直接调用的,

网关相当于服务前面的一道关卡,即服务入口,可以统一进行请求的过滤、校验,可以实现路由。

Ribbon实现服务内部的负载均衡(C、D),网关实现暴露出来的服务的负载均衡(A、B)。

外部不直接访问服务A、B,而是访问网关,通过网关来访问A、B。

如果A、B不集群,网关每次都转发到A-B固定的节点(因为这个服务只有这一个节点),一成不变、是静态的,叫做静态路由。

如果A、B集群,这次可能转发到A-B的某个节点,下次可能转发到A-B的另一个节点,转发的节点不是固定的,是会变化的、动态的,叫做动态路由。

如果网关进行了集群,还需Nginx进行负载均衡,来确定使用哪个网关节点。

Zuul是实现网关的一种技术、一个框架,被SpringCloud集成了。

(1)新建子模块api-gateway

网关要作为Eureka客户端,因为要从Eureka服务器获取服务节点列表,使用Eureka客户端内置的Ribbon进行负载均衡。

所以Eureka客户端的配置都要有。

默认使用的是Ribbon的轮询,如果要使用其它策略,修改方式和Ribbon的完全相同。

(4)application.properties

请求地址:http://ip:port/user-server/user/order/{user_id}

使用网关(Zuul)的ip:port,后面跟该服务名映射的path(不是服务名,只不过上面我设置的path和服务名相同)

会自动根据path找到对应的服务名(service_id),负载均衡确定要使用该服务的哪个节点。不同的服务(暴露出来的那些服务)映射到不同的path。

请求地址:请求地址:http://ip:port/api/user-server/user/order/{user_id} 加在映射地址前面的

ajax的url、<a>链接的href、<form>的action写上面的请求地址。

以后调用消费者(暴露出来的服务)时,不直接调用,而是使用上面的url,通过网关来调用,

网关相当于一个接口(API),提供网关的地址、服务的path供外部调用,所以网关(gateway)又叫做API gateway。

此处网关并未集群,所以直接使用网关的ip:port,请求发给网关;

如果网关要集群,需要使用Nginx做网关的负载均衡,请求发给Nginx。

新建一个包filter,包下新建一个类MyFilter:

网关的请求过滤会过滤所有对暴露出来的服务的请求,所以一般写通用的过滤,比如登录状态检验,如果不是通用的,要写在服务中。

如果暴露出来的服务没有集群,可以不使用网关,直接请求服务节点即可。

文件上传使用SpringMVC的文件上传,但网关默认对上传文件的大小、请求的大小有限制,需要我们在网关的application.properties中配置一下:

在引导类上可以使用@EnableZuulProxy、@EnableZuulServer,这2个注解基本差不多,微小的区别是:

实现过滤器时要继承ZuulFilter类,要指定过滤时机,这个类有很多子类,这些子类已经指定了时机,我们可以直接继承来用,这样就不用指定过滤时机了,使用@EnableZuulServer,少部分子类用不了,影响不大。

编辑:

未经授权许可,不得转载或镜像
© Copyright © 1997-2019 by kmgdwlc.com all rights reserved