每天学点SpringCloud(七):路由器和过滤器-Zuul
为什么要使用Zuul
先来看一下下方这个图
假如现在我们具有四个微服务,分别是用户、订单、支付、催收微服务,它们的调用方式分别是使用http、restful、thrift、kafka。这个时候如果我们在客户端直接调用的话感觉是不是太费劲了,客户端需要维护这几种调用方式的客户端,如果后期新增微服务或者减少或者更换调用方式等,都需要修改客户端。那么我们来看一下加入Zuul以后是什么样子的呢
Zuul呢就负责了所有的调用,解耦了客户端和微服务。也符合我们设计的单一职责原则。
使用Zuul
首先呢,我们在原先的父项目下新增一个cloud-demo-zuul模块,引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
<groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
创建包cn.org.zhixiang,在此包下新建启动类CloudDemoZuulApplication
@SpringBootApplication @EnableZuulProxy public class CloudDemoZuulApplication { public static void main(String[] args) { SpringApplication.run(CloudDemoZuulApplication.class, args); } }
@EnableZuulProxy public class CloudDemoZuulApplication { public static void main(String[] args) { SpringApplication.run(CloudDemoZuulApplication.class, args); } }
@EnableZuulProxy就是开启Zuul的注解
接下来看一下application.yml
spring: application: name: zuul-demo server: port: 8093 eureka: client: register-with-eureka: true service-url: defaultZone: http://root:root@localhost:8761/eureka
application: name: zuul-demo server: port: 8093 eureka: client: register-with-eureka: true service-url: defaultZone: http://root:root@localhost:8761/eureka
这个配置其实是跟我们以往的服务消费者的配置是一样的,为什么要这样配置呢,因为在这个之前我们需要先复习一下以往的知识点,没有看过以往博客的小伙伴可以先参考这个:https://zhixiang.org.cn
首先启动我们的Eureka服务,然后启动一个提供者cloud-demo-provider。我们知道这个时候我们直接访问http://localhost:8078/user/getUser/2是可以获得数据的对吧,那么我的Zuul是怎么使用的呢。我们启动一下我们的Zuul。
这个时候我们访问http://localhost:8093/provider-demo/user/getUser/2获得的数据是一样的,也就是说我们的Zuul做了一个路由转发。我们可以看到这个url中有一个provider-demo,这个呢是提供者的spring.application.name的值,那么如果我们不想使用这个呢,比如说现在我知道这是user微服务,我就想如果访问user微服务我就使用http://localhost:8093/user/user/getUser/2怎么办呢。
配置
我们需要在yml中加上一个配置。
zuul: routes: provider-demo: /user/**
routes: provider-demo: /user/**
这个配置呢就是把服务id为provider-demo的微服务项目地址映射为/user/**.注意最后是两个*,为什么是两个呢,如果是一个*只能匹配/user/a,/user/b这种路径,而匹配不了/user/a/b这种。而我们配两个*的话不仅可以匹配/user/a/b,还能匹配/user/a/b/c/d等。
这个时候我们访问http://localhost:8093/user/user/getUser/2的时候就可以得到数据了。
其实还有别的写法。我们来看一下
1.
zuul: routes: demo: path: /user/** serviceId: provider-demo
routes: demo: path: /user/** serviceId: provider-demo
2.
zuul: routes: demo: path: /user/** url: http://localhost:8078/
routes: demo: path: /user/** url: http://localhost:8078/
上方这两种方式都是可以的,那个demo呢其实是自定义的,只要不是重复就行。然后path呢就是网页上我们访问的url。这两种方式就是分别将这哥path映射到serviceId或者一个url。
负载均衡
刚才我们探讨的一直都是单个服务的情况,那么当我们有多个微服务的时候应该怎么操作呢
zuul: routes: demo: path: /user/** serviceId: provider-demo provider-demo: ribbon: listOfServers: http://localhost:8078,http://localhost:8079
routes: demo: path: /user/** serviceId: provider-demo provider-demo: ribbon: listOfServers: http://localhost:8078,http://localhost:8079
使用这种方式以后,我们再启动一下我们原先的cloud-demo-provider-2项目,然后启动Zuul访问时会发现已经实现了负载均衡
文件上传
我们使用zuul做路由的时候可能会碰到上传文件的需求,上传小文件到是没事,但是如果大文件的话是无法上传呢,这儿呢就有一个办法来绕过SpringMVC的DispatchServlet。
例如我们上传文件的接口为http://localhost:8093/user/user/uploadFile 那么我们在上传的时候就可以访问http://localhost:8093/zuul/user/user/uploadFile来实现上传大文件
GitHub:https://github.com/2388386839/spring-cloud-demo
码云:https://gitee.com/zhixiang_blog/spring-cloud-demo
如果对您有所帮助,请记得帮忙点一个star哦
本文出自https://zhixiang.org.cn,转载请保留。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
局域网局域网架构简介
本文根据《鸟哥的Linux私房菜-服务器架设篇》第三章总结 局域网的布线规划 本文主要介绍的是小型局域网的架构,如果是比较大型的企业内部,那么将“配线架、线路设计、墙上网络接口”分别拆开施工的结构化布线会比较妥当。以下内容为假设仅有一条ADSL的对外连接的情况。 Linux 直接联网 -- 让 Linux 与一般 PC 的地位相同 特点:Linux 服务器可以作为内部的文件服务器或者是打印服务器。 优点:每个设备都给予一个相同的网络的私有 IP 就可以进行工作了,可享用局域网的功能的同时可以单独通过拨号连接 Internet 缺点:不安全,不容易进行网络控制 适用:一般家庭用户 Linux 直接联网 -- 让 Linux 与一般 PC 处于不同的地位相同 特点: Linux 服务器主要是提供 Internet 的 WWW 或 Mail 服务,且 Linux 有 Public IP 优点:易维护、配置,可以再 IP 路由器上设置简单的防火墙规则、如果 IP 路由器为功能全面的路由设备,可以定义较完整的防火墙规则,完善对内部主机的管理 缺点:不方便共享文件(服务器不在内部网络) 适用:小型...
- 下一篇
IMB总架构师:话说程序员的职业生涯
有一些年轻的程序员向我咨询,将来的路应该怎么走?俗话说,条条大路通罗马。不同的路都能走向成功。到底选哪条路,取决于自己的兴趣。可能有程序员会问:如果还没找到自己的兴趣怎么办?我的建议是多尝试,努力做,这是职业生涯的必经之路。当你积累了一定的技术和经验之后,就会面临多种选择。选择哪条路,因人而异。 如果对某一种或几种技术非常感兴趣,并且能够持续钻研,经过一定时期的积累,你可以逐渐成长为专家级程序员。专家级程序员对于所掌握的专业技术的熟练程度非一般程序员能及,各类常见编程问题在他们手中都能迎刃而解,可以说这类专家“越老越值钱”但是这类专家也有一定的风险性:随着经验的增加和年龄的增长,这些人的工资会越来越高,当公司改变技术路线而不再需要专家级程序员所掌握的专业技术时,或者想降低做事的成本,他们就可能面临失业或者另找工作的局面。 资深培训专家也是个不错的发展方向。成为培训专家,不仅需要深厚的技术功底,同时还要具备优秀的沟通和表达能力,因为他们的主要工作不再是研发某种技术,而是传播技术知识。这条路很宽,有一些优秀的技术培训师除了担任本职工作,还会兼职到大学里讲课。虽然培训专家的技术可能达不到专家...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS关闭SELinux安全模块