1、不同的微服务一般会有不同的网络地址,外部客户端可能需要调用多个服务的接口才能完成一个业务需求。 a:流程图 a:客户端会多次请求不同的微服务,增加了客户端的复杂性。 b:存在跨域请求,在一定场景下处理相对复杂。 c:认证复杂,每个服务都需要独立认证。 d:难以重构,随着项目的迭代,可能需要重新划分微服务。例如:将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施,这样可能比重写一个都麻烦。 e:微服务可能使用了防火墙/浏览器不友好的协议,直接访问会有一定的困难。 a:流程图 a: 解决耦合,减少了客户端与各个微服务之间的交互次数。 b: 易于监控,可在微服务网关收集监控数据并将其推送到外部系统进行分析。 c: 易于认证。可在微服务网关上进行认证,然后再将请求转发到后端的微服务,无须在每个微服务中进行认证。 1、Zuul 是Netflix开源的一个API网关,本质上是一个Web Servlet应用。Zuul也是Spring Cloud全家桶中的一员, 它可以和Eureka(注册中心)、Ribbon(负载均衡)、Hystrix(限流)等组件配合使用。 2、代码托管地址 3、核心功能 过滤器 4、小试牛刀 基于Spring boot 搭建 goods server、orders server 依赖 启动Eureka 、Zuul 、启动两个服务 goods server、orders server 访问 https://localhost:8081/orders-server/goods https://localhost:8082/goods-server/orders 5、ZuulFilter接口 6、ZuulFilter 代码实现 7、启动再次测试 https://localhost:8082/goods-server/orders https://localhost:8082/goods-server/orders?accessToken=flame 8、Filter的生命周期 9、Zuul 1.x架构图 a:定期轮训存放Filter目录 b:新加入的或者修改过的过滤器会被动态的加载进来。 c:读取完的 .groovy 文件,会使用 GroovyComplier 将其编译成为JVM Class,之后再实例化(Class.newInstance)成 ZuulFilter 对象(即过滤器),最终保存在 FilterRegistry 中。 1、Zuul 2 的三种类型 1、过滤器前端用Netty Server代替了原本 Zuul 1中的Servlet。 2、后端过滤器使用Netty Client 代替了HttpClient。 3、Zuul 2在功能上也丰富和优化了很多 如:HTTP/2、WebSocket的支持。 4、Zuul 2 采用异步非阻塞模式 特点: 启动的线程很少,使用的线程资源少,上下文切换开销也少,非阻塞模式可以接受的连接数大大增加,复杂度也增加。 5、Zuul 1 采用同步阻塞模式 特点: a:模型比较简单,请求->处理->响应的流程(call flow)都是在一个线程中处理的,开发调试也便于理解,Debug也比较方便。 b:同步阻塞模式一般会启动很多的线程,必然引入线程切换开销。同步阻塞模式下,容器线程池的数量一般是固定的,造成对连接数有一定限制。 c:当后台服务慢,容器线程池易被耗尽。一旦耗尽容器会拒绝新的请求,这个时候容器线程其实并不忙,只是被后台服务调用IO阻塞,资源浪费。 1、根据特定场景选择合适的。 性能、并发、个人技术实力(处理实际问题能力) 2、异步相对来说业务比较复杂。
一、为什么需要网管
二、Zuul网关
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> <version>2.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.2.2.RELEASE</version> </dependency> </dependencies>
application.yml spring: application: name: zuul-service eureka: client: service-url: defaultZone: http://localhost:8761/eureka server: port: 6069
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy public class ZuulServiceApplication { public static void main(String[] args) { SpringApplication.run(ZuulServiceApplication.class, args); } }
package com.haoxiansheng.springcloud.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Objects; /** * @author haoxiansheng */ @Component public class LoginFilter extends ZuulFilter { Logger logger = LoggerFactory.getLogger(getClass()); /** * 请求路由前调用 * @return */ @Override public String filterType() { return "pre"; } /** * int 值来定义过滤器的执行顺序,数值越小优先级越高 * @return */ @Override public int filterOrder() { return 0; } /** * 该过滤器是否执行, true 执行 false 不执行 * @return */ @Override public boolean shouldFilter() { return true; } /** * 业务逻辑 * @return * @throws ZuulException */ @Override public Object run() throws ZuulException { RequestContext context = RequestContext.getCurrentContext(); HttpServletRequest request = context.getRequest(); //获取请求参数token的值 String token =request.getParameter("token"); if (Objects.isNull(token)){ logger.warn("此操作需要先登录系统。。。"); context.setSendZuulResponse(false); context.setResponseStatusCode(200); try { //响应结果 context.getResponse().getWriter().write("token is empty"); } catch (IOException e){ e.printStackTrace(); } return null; } logger.info("ok"); return null; } }
响应 401
响应 成功
三、Zuul 2
四、Zuul 1 vs Zuul 2
五、Zuul 1、Zuul 2 、Spring Cloud Gateway 、Kong
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算