Spring Cloud——路由网关Zuul

news/2025/2/28 16:30:36/

???

哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!???

一心同学】的写作风格:喜欢用【通俗易懂】的文笔去讲解每一个知识点,而不喜欢用【高大上】的官方陈述。

一心同学】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。

如果有对【后端技术】感兴趣的【小可爱】,欢迎关注一心同学】???

感谢各位大可爱小可爱!


目录

一、什么是网关?

二、什么是Zuul?

三、Zuul 能做什么?

四、Zuul和Eureka整合

五、搭建Zuul

5.1? 建立Maven父工程

5.2 建立子工程

5.3? 配置服务中心 springcloud-eureka-7001

5.4? 配置服务生产方springcloud-provider-blog-8001

5.5? 配置路由网关springcloud-zuul

5.6? 测试

小结


一、什么是网关?

网关是一个网络整体系统中的前置门户入口,请求首先通过网关,进行路径的路由,定位到具体的服务节点上。

二、什么是Zuul

(1)Zuul是一个微服务网关,也是会在Eureka注册中心中进行服务的注册和发现,请求应该通过Zull来进行路由。

(2)Zuul网关不是必要的,是推荐使用的,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。

(3)Zuul包含了对请求的路由和过滤两个最主要功能:

  • 路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。
  • 过滤器功能:负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。

三、Zuul 能做什么?

Zuul可以通过加载动态过滤机制,从而实现以下各项功能:

(1)验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。

(2)审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。

(3)动态路由: 以动态方式根据需要将请求路由至不同后端集群处。

(4)压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。

(5)负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。

(6)静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。

(7)多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

除此之外,Netflix公司还利用Zuul的功能通过金丝雀版本实现精确路由与压力测试

四、Zuul和Eureka整合

Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

五、搭建Zuul

5.1 建立Maven父工程

编写pom.xml:

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><!--springCloud的依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR12</version><type>pom</type><scope>import</scope></dependency><!--SpringBoot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.12.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

5.2 建立子工程

注意:同样是Maven

springcloudeureka7001_141">5.3 配置服务中心 springcloud-eureka-7001

(1)建立以下目录

(2)导入依赖

 <!--导包~--><dependencies><!--导入Eureka Server依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.6.RELEASE</version></dependency><!--热部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>

(3)编写配置文件

application.yml:

server:port: 7001# Eureka配置
eureka:instance:# Eureka服务端的实例名字hostname: localhostclient:# 表示是否向 Eureka 注册中心注册自己(这个模块本身是服务器,所以不需要)register-with-eureka: false# fetch-registry如果为false,则表示自己为注册中心,客户端的化为 turefetch-registry: false# Eureka监控页面~service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

(4)编写启动类

package com.yixin.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaServer_7001 {public static void main(String[] args) {SpringApplication.run(EurekaServer_7001.class, args);}}

springcloudproviderblog8001_208">5.4 配置服务生产方springcloud-provider-blog-8001

(1)建立以下目录

(2)导入依赖

  <!--导包~--><dependencies><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --><!--导入Eureka Server依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version></dependency><!--Spring Boot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId><version>2.4.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.4.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId><version>2.4.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId><version>2.5.2</version></dependency><!--热部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>

(3)编写配置类

server:port: 8001spring:application:name: springcloud-provider-blog# Eureka配置:配置服务注册中心地址
eureka:client:service-url:defaultZone: http://localhost:7001/eureka/instance:instance-id: springcloud-provider-dept-8001 #修改Eureka上的默认描述信息

(4)编写BlogController

package com.yixin.springcloud.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class BlogController {//表示db这个数据库@Value("dbsource")private String dbsource;@GetMapping("/blog/info/{id}")public String getInfo(@PathVariable("id") Integer id){return dbsource+id;}}

(5)编写启动类

package com.yixin.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class BlogProvider_8001 {public static void main(String[] args) {SpringApplication.run(BlogProvider_8001.class,args);}}

springcloudzuul_325">5.5 配置路由网关springcloud-zuul

(1)建立以下目录

(2)导入依赖

 <dependencies><!--导入zuul依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId><version>1.4.6.RELEASE</version></dependency><!--Eureka--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>

(3)编写配置类

server:port: 9527spring:application:name: springcloud-zuul-yixineureka:client:service-url:defaultZone: http://localhost:7001/eureka/instance:instance-id: zuul9527.comprefer-ip-address: truezuul:routes:mydept.serviceId: springcloud-provider-blogmydept.path: /myblog/**ignored-services: springcloud-provider-dept # 不能再使用该路径访问# ignored-services: "*" # 隐藏全部的prefix: /yixin #公共的访问前缀

注意:经过我们的路由网关规则配置,

原来访问:http://localhost:9527/springcloud-provider-blog/blog/info/5

配置过后访问:http://localhost:9527/yixin/myblog/blog/info/5

(4)编写启动类

注意:添加注解@EnableZuulProxy开启Zuul。

package com.yixin.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication
@EnableZuulProxy  // 开启Zuul
public class ZuulApplication_9527 {public static void main(String[] args) {SpringApplication.run(ZuulApplication_9527.class,args);}}

5.6 测试

依次启动:

a、springcloud-eureka-7001:服务注册中心

b、springcloud-provider-blog-8001:服务生产方

c、springcloud-zuul:路由网关

(1)访问:http://localhost:7001/

出现以下界面,说明成功把我们的两个服务(服务生产方和路由网关)注册进来了。

(2)访问:http://localhost:9527/yixin/myblog/blog/info/6

注意:是9527端口!

我们看到,微服务名称被替换并隐藏,换成了我们自定义的微服务名称myblog,同时加上了前缀yixin,这样就做到了对路由访问的加密处理!

(3)访问:http://localhost:9527/springcloud-provider-blog/blog/info/5

由于我们在配置文件中配置了以下语句,所以这样访问是不允许的。

ignored-services: springcloud-provider-dept # 不能再使用该路径访问

(4)如果我们不配置zuul规则,那么上面的链接是可以正常访问的

application.yml

server:port: 9527spring:application:name: springcloud-zuul-yixineureka:client:service-url:defaultZone: http://localhost:7001/eureka/instance:instance-id: zuul9527.comprefer-ip-address: true

重启spring-zuul

重新访问:http://localhost:9527/springcloud-provider-blog/blog/info/5

至此,测试成功!


小结

以上就是【一心同学】对基于Spring Cloud对其组件【路由网关Zuul】的讲解,我们要记住其两个最核心的功能【路由】和【过滤】,通过对路由网关的处理,可以做到对我们的访问进行【加密处理】!

如果这篇【文章】有帮助到你,希望可以给【一心同学】点个赞??,创作不易,相比官方的陈述,我更喜欢用【**通俗易懂】**的文笔去讲解每一个知识点,如果有对【后端技术】感兴趣的小可爱,也欢迎关注【一心同学】,我将会给你带来巨大的【收获与惊喜】???!


http://www.ppmy.cn/news/1575548.html

相关文章

网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析

1. 基本定义 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 应用层协议&#xff0c;用于客户端与服务器之间的数据传输&#xff08;默认端口 80&#xff09;。 HTTP/1.0&#xff1a;早期版本&#xff0c;每个请求需单独建立 TCP 连接&#xff0c;效率低。HTTP/1.1&…

DeepSeek 提示词:基础结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

netcore入门案例:netcore api连接mysql的完整记事本接口示例

以下是一个使用 .NET Core API 连接 MySQL 数据库实现简单记事本功能的完整示例&#xff0c;包含创建、读取、更新和删除&#xff08;CRUD&#xff09;操作。 1. 创建 .NET Core Web API 项目 首先&#xff0c;打开命令行工具&#xff0c;使用以下命令创建一个新的 .NET Core…

2025年02月27日Github流行趋势

项目名称&#xff1a;aibrix 项目地址url&#xff1a;https://github.com/vllm-project/aibrix 项目语言&#xff1a;Jupyter Notebook 历史star数&#xff1a;2568 今日star数&#xff1a;554 项目维护者&#xff1a;Jeffwan, varungup90, brosoul, nwangfw, kr11 项目简介&am…

如何在 WPS 中集成 DeepSeek

如何在 WPS 中集成 DeepSeek&#xff1a;从零基础到高阶开发的完整指南 DeepSeek 作为国内领先的 AI 办公助手&#xff0c;与 WPS 的深度整合可显著提升文档处理效率。本文提供 ​4 种集成方案&#xff0c;覆盖从「小白用户」到「企业开发者」的全场景需求&#xff0c;并包含 …

Redis 底层数据结构 —— SDS(简单动态字符串)

文章目录 前言一、SDS是什么&#xff1f;二、为什么要采用SDS?三、SDS结构详解3.1 SDS 类型定义3.2 SDS结构组成 四、SDS的预分配内存五、再谈为什么要采用SDS?六、总结 前言 我们都知道redis是用c语言实现的&#xff0c;但是c语言并没有字符串结构&#xff0c;而是通过字符…

【弹性计算】Guest OS

Guest OS 1.基础架构2.成本效率优化2.1 保障兼容性、简化生态环境&#xff0c;解决方案一键部署2.2 提升资源弹性和资源利用率2.2.1 系统资源的量化和监控2.2.2 资源隔离能力 3.安全性和稳定性增强3.1 安全性3.2 RAS3.2.1 可靠性&#xff08;Reliability&#xff09;3.2.2 可用…

jspssm542Springboot 医疗服务系统

&#x1f4d8; 博主小档案&#xff1a; 花花&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 花花在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于java、python等技术。近年来&#xff0c;花花更…