网站首页 > 精选教程 正文
Zuul
前期准备
按照我之前的文章《极简Spring Boot搭建、开发、部署》、《Spring Cloud注册中心——Eureka&集群》创建Eureka注册中心(单机版即可),以及两个服务:order-service(端口1111)、user-service(端口2222),get请求返回文本,如下:
Order Service
User Service
Zuul
参考之前的文章创建zuul-service工程,依赖选择Web、Eureka Discovery、Zuul。pom文件就不附图了。
代码:
代码
如图,就多加一个@EnableZuulProxy。
application.yml
application.yml
注意红框path是我们在浏览器、前端APP、其他微服务上访问的url,serviceId是之前两个工程的application name。
这是按照serviceId来进行路由的,还有一种是用url,这里就不写了。
结果:
启动所有工程,Eureka监控页面如下:
Eureka监控页面
单独访问两个Service,与通过Zuul路由过去访问页面对比:
User Service
Order Service
Zuul过滤器
使用路由有一个很直接的好处,就是可以对访问进行某种统一的处理。
比如你有N个微服务,都要求有权限的客户端访问(比如本例使用的Access Token)。如果所有的微服务都要搞一个Access Token校验的话,那也太Low了。用Zuul就可以了,统一鉴权。
自定义过滤器代码:
继承ZuulFilter
代码1
代码2
代码3
这里主要说一下filterType,有4个值:
pre:进行路由前调用;
routing:进行路由的时候调用;
error:发生错误时调用;
post:routing&error之后调用;
实例化:
实例化
结果:
启动4个服务,分别输入如下图的URL,结果如下:
AccessToken为null
AccessToken为空字符串
AccessToken正确
后台日志:
后台日志
过滤器之间传递数据:
实际开发中,我们可能需要配置多个过滤器,比如第一个过滤器是校验用户名、密码,第一个过滤器是校验此用户的是否有访问请求URL的权限。如果第一个通过了,则继续执行过滤器2,如果第一个没通过,过滤器2就不执行。
我们先在第一个过滤器中的校验代码里增加如下代码:
过滤器传数据
在第二个过滤器里增加如下代码:
获取数据
Zuul的高可用
因为所有的请求都要从Zuul过,生产环境中它的高可用就是必须的了。
简单的说,Zuul我们可以把他们当成普通的微服务,所以我们可以部署多个,然后注册到Eureka注册中心,A微服务调用其中某个Zuul服务,再通过它转发到B服务。
这种场景适用于内部调用,对于外部调用来说(比如网页、手机客户端、第三方请求),人家总不能再去注册你的Eureka服务端吧,再说把Eureka注册中心暴露在外网也很不安全。
可以用如下办法解决,对于Zuul来说暴露在外面的也就是URL,我们可以使用Nginx对外暴露一个URL,然后转发到Zuul服务,Nginx还有负载均衡。
具体可以参考我之前的文章《Keepalived+Nginx高可用安装部署(含Nginx+Tomcat负载均衡)》,文章是通过Nginx把请求转发到多个Tomcat,现在我们可以改成转发到多个Zuul服务上。
- 上一篇: 「微服务」Zuul的必要性 微服务的12要素
- 下一篇: 以Zuul为例说明API网关的基本原理
猜你喜欢
- 2024-10-17 全新开源!Jenkins结合SpringCloud+K8S,打通微服一条龙技术讲解
- 2024-10-17 Java系统可用性常见策略及实现 java可靠性
- 2024-10-17 为什么微服务一定要有网关? 看完这篇就懂了!
- 2024-10-17 高性能多级网关与多级缓存架构落地实战(超清完结)
- 2024-10-17 Java技术选型 javaweb技术选型
- 2024-10-17 比较API网关性能 api网关对比
- 2024-10-17 为什么微服务一定要有网关? 微服务的网关
- 2024-10-17 老板要搞微服务,只能硬着头皮上了...
- 2024-10-17 精品!阿里P7爆款《K8s+Jenkins》技术笔记,高质量干货必收藏
- 2024-10-17 密码安全与会话安全 密码与安全性需要密码
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)