千家信息网

Spring Cloud的Web项目中如何使用Zuul

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,这篇文章给大家分享的是有关Spring Cloud的Web项目中如何使用Zuul的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Web项目中使用Zuul关于ZuulSprin
千家信息网最后更新 2024年12月12日Spring Cloud的Web项目中如何使用Zuul

这篇文章给大家分享的是有关Spring Cloud的Web项目中如何使用Zuul的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Web项目中使用Zuul

关于Zuul

Spring Cloud集群提供了多个组件,用于进行集群内部的通信,例如服务管理组件Eureka,负载均衡组件Ribbon。如果集群提供了API或者Web服务,需要与外部进行通信,比较好的方式是添加一个网关,将集群的服务都隐藏到网关后面。这样的做法,对于外部客户端来说,无需关心集群的内部结构,只需关心网关的位置等信息;对于Spring Cloud集群来说,不必过多的暴露服务,提升了集群的安全性。

代理层作为应用集群的大门,在技术选取上尤为重要,很多传统的解决方案,在软件上选择了Nginx、Apache等服务器。Netflix提供了自己的解决方案:Zuul。Zuul是Netflix的一个子项目,Spring Cloud将Zuul做进一步的实现与封装,整合到spring-netflix项目中,为微服务集群提供过代理、过滤、路由等功能。

Web项目整合Zuul

新建一个名称为"first-router"的Maven项目,项目使用的依赖如下:

                    org.springframework.cloud            spring-cloud-starter-zuul                            org.apache.httpcomponents            httpclient            4.5.3        

需要加入"spring-cloud-starter-zuul"的依赖,由于Zuul底层使用了HttpClient,因此还要加入相应的依赖。为了能让Web项目开启对Zuul的支持,在应用类中加入@EnableZuulProxy注解,请见代码清单7-1。

代码清单7-1:

codes\07\02\first-router\src\main\java\org\crazyit\cloud\GatewayApplication.java

@EnableZuulProxy@SpringBootApplicationpublic class GatewayApplication {    public static void main(String[] args) {        new SpringApplicationBuilder(GatewayApplication.class).properties(                "server.port=8080").run(args);    }}

注意该项目的启动端口为8080。完成以上工作后,一个拥有Zuul功能的Web项目已经建立,接下来,将测试它的路由功能。

测试路由功能

前一小节已经建立了路由器项目,接下来建立源服务的项目,测试例子的结构请见图7-1所示。

图7-1 测试例子结构图

新建名称为"book-server"的Maven项目,该项目是一个最普通的Spring Boot项目,使用以下的依赖:

                    org.springframework.boot            spring-boot-starter-web            1.5.4.RELEASE        

为"book-server"添加一个"/hello"的服务,项目的启动类以及控制器,请见代码清单7-2。

代码清单7-2:codes\07\02\book-server\src\main\java\org\crazyit\cloud\BookApplication.java

@SpringBootApplication@RestControllerpublic class BookApplication {    @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET)    public String hello(@PathVariable String name) {        return "hello " + name;    }    public static void main(String[] args) {        new SpringApplicationBuilder(BookApplication.class).properties(                "server.port=8090").run(args);    }}

为了简单起见,本例将启动类与控制器写到一起,注意"book-server"的端口为8090。在控制器中,建立了一个"/hello/{name}"的服务,成功调用后,会返回相应的字符串。接下来,修改"first-router"项目的配置文件,让其进行转发工作。

修改"first-router"项目的application.yml文件,加入以下内容:

zuul:   routes:    books:      url: http://localhost:8090

加入以上配置后,发送给http://localhost:8080/books的所有请求,都会被转发到8090端口,也就是访问"first-router"项目,实际上最终会调用"book-server"的服务。启动两个应用,在浏览器中输入以下地址:http://localhost:8080/books/hello/crazyit,可以看到浏览器输出如下:

hello crazyit

根据输出结果可知,发送的请求已经被转发到"book-server"进行处理。

过滤器运行机制

前面例子的路由项目,我们使用了@EnableZuulProxy注解,开启该注解后,在Spring容器初始化时,会将Zuul的相关配置初始化,其中包含一个Spring Boot的bean:ServletRegistrationBean,该类主要用于注册Servlet。Zuul提供了一个ZuulServlet类,在Servlet的service方法中,执行各种Zuul过滤器(ZuulFilter)。图7-2为HTTP请求在ZuulServlet中的生命周期。

图7-2 HTTP请求的生命周期

ZuulServlet的service方法接收到请求后,会执行"pre"阶段的过滤器,再执行"routing"阶段的过滤器,最后执行"post"阶段的过滤器。其中"routing"的过滤器,会将请求转发到"源服务",源服务可以是第三方的Web服务,也可以是Spring Cloud的集群服务。在执行pre和routing阶段的过滤器时,如果出现异常,则会执行"error"过滤器。整个过程的HTTP请求、HTTP响应、状态等数据,都会封装到一个RequestContext的对象中,这将在后面章节中讲述。

感谢各位的阅读!关于"Spring Cloud的Web项目中如何使用Zuul"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

项目 服务 集群 过滤器 路由 代码 功能 清单 阶段 测试 接下来 例子 内容 控制器 注解 端口 组件 结构 网关 应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 敏捷软件开发图书 网络安全幼儿活动教案 华为云的服务器硬件是哪家的 梦幻买号挖图白云山服务器怎么样 面板数据指哪种数据库 我为网络安全代言作文 县应急局参加网络安全培训会 网络安全执法 高层次人才 IP6访问群晖服务器 华为公司用的什么数据库 堡垒机网络技术手段 绍兴数字视频系统服务器 如何制作一个服务器应用软件 世界四大主流关系型数据库 小米服务器怎么开发 计算机网络技术基础能力 生鲜电商软件开发哪家专业 mc屠龙之后服务器 网络安全八个严禁 h55主板能上服务器内存吗 数据库表设置字段大小写不敏感 服务器登录数据库加端口 数字货币数据库找回货币 南京直播软件开发教程 萝岗网络安全服务怎么选择 平安保险软件开发待遇 易优软件开发 国际旅游网络技术与应用大赛 数据库查询策略 软件开发外包需要什么专业
0