



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用Spring Cloud Zuul Proxy构建API网关 PAGE 4微服务 - 第5部分:使用Spring Cloud Zuul Proxy构建API网关API网关是为服务架构中不可或缺的一个组件,我们将会从这个教程中学习到如何使用Spring Cloud Zuul Proxy 来构建API网关。在微服务架构中,可能包含了大量的API服务和少数和页面UI组件进行交互的API接口。截至目前,许多微服务应用依旧是采用过去那种单体的前端框架,即将整个UI都构建在一个单独的模块中。你也可以选择会微前端,也就是将整个UI切分为独立的多个微服务,然后通过使用API接口来获取仅与该模块相关的数据。
2、为了避免让单个UI模块可以访问到我们所有的微服务的详细信息,我们可以使用一个统一的代理接口,通过URL来匹配调用不同的微服务。在这篇文章中,我们将会学习到如何使用Spring Cloud Zuul Proxy来构建一个API网关。在这篇文章中,我们将会学到为什么我们需要API 网关使用Spring Cloud Zuul Proxy来实现API网关使用Zuul Filters来切分关注点(类似于Spring的AOP)API网关,也叫做边界服务(Edge Service),是为一系列的微服务提供了一个统一接口。这样子的话, 客户端就不需要了解整个微服务内部的所有细节。但是在微服务架构中使用API网
3、关,有利亦有弊。优点:向客户端提供更简单的接口避免向客户端暴露过多内部微服务的细节允许重构微服务, 而不需要强制重构客户端的逻辑能够集中的管理类似安全,监控,限速等可以横切的操作缺点:如果不采取合适的措施来构建网关的高可用,可能会引起单点故障要了解各种不同的微服务API,可能需要了解API网关Spring Cloud提供了可以用于创建API网关的Zuul Prxoy,该组件功能类似于Nginx。让我们创建一个基于Spring Boot框架的前端的UI模块-“shoppingcart-ui”。该模块依赖了Web,Config Client, Eureka Discovery,Zuul的start
4、er,并在主入口点类中使用EnableZuulProxy进行标注。pom.xmlorg.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-configorg.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.cloudspring-cloud-starter-netflix-zuulShoppingcartUiApplication.javaimport
5、 org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; import flix.zuul.EnableZuulProxy;EnableZuulProxy SpringBootApplicationpublic class ShoppingcartUiApplication public static void main(String args) SpringApplication.run(ShoppingcartUiAppli
6、cation.class, args);因为我们使用Eureka作为服务发现,所以URL格式形如 /service-id/* 会被转发到在Eureka Server上注册的service id 为“service-id”的微服务应用上。举个例子,如果我们将来自前端应用的请求标记为 http:/localhost:8080/catalog-service/products ,那么Eureka Server会从注册的服务仓库中找到service-id为catalog-service服务,并将这个请求的url重新设为 /products ,并发送到任意一个可到达的catalog-service的微服
7、务实例上。为了将“shoppingcart-ui”注册到Eureka的服务注册器上,我们需要按照以下设置perties=shoppingcart-ui server.port=8080eureka.client.service-url.defaultZone=http:/localhost:8761/eureka/通过这种配置,接下来我们可以使用JQuery来从catalog-service上获取商品信息$.ajax(url: /catalog-service/products).done(function(data) ducts = data;.bind(this);从我们的前端应用,我们使
8、用 http:/localhost:8080/catalog-service/products 对后端进行调用。假设catalog-service服务运行在8181端口,在注册时将“catalog-service”作为service-id。那么来自前端的请求将会被转发到 http:/host:8181/products 。这时候前端应用是完全无法感知到实际的catalog-service任何部署的信息,包括主机名,端口号等。我们同样也可以为这些url设置一个通用的前缀,就像“/api”,为了能够让Zuul来代理这类的url,我们需 要设置zuul.prefix这个属性。zuul.prefix=
9、/api现在,我们可以从前端页面,创建一个请求 http:/localhost:8080/api/catalog-service/products 来获取商品。默认的,Zuul会自动的帮我们剥离配置的前缀后,并进行转发。你也可以按照以下配置,为一个服务定义一个路径映射关系zuul.routes.catalogservice.path=/catalog/* zuul.routes.catalogservice.serviceId=catalog-service通过这种配置,你可以使用 http:/localhost:8080/api/catalog/products 这个url, 它将会被转发到
10、service- id为catalog-service的微服务应用上。默认的,Eureka Server会暴露所有注册在它上面的微服务。你可以使用zuul.ignored-services 属性来禁止这种行为,且只有显式配置的服务才会被暴露。zuul.ignored-services=*zuul.routes.catalogservice.path=/catalog/* zuul.routes.catalogservice.serviceId=catalog-servicezuul.routes.orderservice.path=/orders/* zuul.routes.orderserv
11、ice.serviceId=order-service通过这种配置,可以通过Zuul Proxy暴露出去的只有catalog-service, order-service,而不是所有的后端微服务。因为Zuul扮演的是一个能够访问到所有微服务的代理角色,所以我们可以使用Zuul服务来实现一些类似安全,流量限制的切面操作。一个常见的使用示例是,将认证信息头转发到所有的下游服务。使用Zuul Proxy为下发到游的微服务转发授权的信息头。通常在微服务中,我们使用OAuth进行认证和授权。一旦一个客户端通过OAuth服务的认证,就会生成一个令牌。这个令牌会被添加到请求头中,通过这种方式就可以避免在访问
12、每一个微服务时,还要进行单独的认证。我们可以使用Zuul Filter来实现类似的功能。 PAGE 5import flix.zuul.ZuulFilter;import flix.zuul.context.RequestContext; import flix.zuul.exception.ZuulException; import javax.servlet.http.HttpServletRequest; import java.util.UUID;import static flix.zuul.filters.support.FilterConstants.PRE_TYPE; publ
13、ic class AuthHeaderFilter extends ZuulFilter Overridepublic String filterType() return PRE_TYPE;Overridepublic int filterOrder() return 0;Overridepublic boolean shouldFilter() return true;Overridepublic Object run() throws ZuulException RequestContext ctx = RequestContext.getCurrentContext(); HttpSe
14、rvletRequest request = ctx.getRequest();if (request.getAttribute(AUTH_HEADER) = null) /generate or get AUTH_TOKEN, ex from Spring Session repository String sessionId = UUID.randomUUID().toString(); ctx.addZuulRequestHeader(AUTH_HEADER, sessionId);return null;我们通过使用RequestContext.addZuulRequestHeader()方法来添
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《胃镜检查技术》课件
- 山东省泰安市肥城市2024-2025学年度下学期期中考试七年级语文试题(含答案)
- 独立包装机转让合同协议
- 设备承包合同范本
- 美容院项目合作协议书
- 2024年全新备战裁判员试题及答案
- 模具设计师资格考试思维导图试题及答案
- 2024年农作物种子繁育趋势试题及答案
- 《解锁宇宙奥秘》课件
- 早起的农民收益高的植保员试题及答案
- 《中国海洋大学》课件
- 排污许可管理培训课件
- 《盐津铺子公司盈利能力探析实例报告(10000字论文)》
- 2025年中考语文课内名著阅读专题复习:第10部 《水浒传》课件
- 案例:中建八局绿色施工示范工程绿色施工(76P)
- 水产养殖技术培训
- 2025年希望数学五年级培训题(含答案)
- 保洁投标书范本
- 2025年中小学生读书知识竞赛题库及答案
- 第六讲当前就业形势与实施就业优先战略-2024年形势与政策
- 社会医学(含考试)学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论