【springcloud学习(dalston.sr1)】Zuul路由访问映射规则配置及使用(含源代码)(十二)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一)

springcloud学习(dalston.sr1)系统文章汇总如下:

【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一)

【springcloud学习(dalston.sr1)】Eureka服务端集群的搭建(含源代码)(二)

【springcloud学习(dalston.sr1)】Eureka单个服务端的搭建(含源代码)(三)

【springcloud学习(dalston.sr1)】Eureka 客户端服务注册(含源代码)(四)

【springcloud学习(dalston.sr1)】服务消费者通过restTemplate来访问服务提供者(含源代码)(五)

【springcloud学习(dalston.sr1)】Eureka 服务发现(含源代码)(六)

【springcloud学习(dalston.sr1)】Ribbon负载均衡(含源代码)(七)

【springcloud学习(dalston.sr1)】使用Feign实现接口调用(含源代码)(八)

【springcloud学习(dalston.sr1)】Hystrix服务熔断(含源代码)(九)

【springcloud学习(dalston.sr1)】Hystrix服务降级(含源代码)(十)

【springcloud学习(dalston.sr1)】Hystrix Dashboard服务监控(含源代码)(十一)

【springcloud学习(dalston.sr1)】Zuul路由访问映射规则配置及使用(含源代码)(十二)

【springcloud学习(dalston.sr1)】Config配置中心-ConfigServer端与Git通信(含源代码)(十三)

【springcloud学习(dalston.sr1)】Config配置中心-Configclient端通过和Config server端通信来获取配置文件信息(含源代码)(十四)

(一)zuul路由规则的理解

Zuul包含了对请求的路由和过滤功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获取其他微服务的消息,也即以后得访问微服务都是通过Zuul跳转后获得。Zuul最终还是会注册进Eureka。

这点Zuul有点类似于Nginx

(二)Zuul路由配置,这里需要新建一个项目microservicecloud-zuul-gateway-9527。该项目的整体结构如下图:

(1)在POM文件中增加如下依赖

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud2025</artifactId>
        <groupId>com.company</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>microservicecloud-zuul-gateway-9527</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.company</groupId>
            <artifactId>microservicecloud-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!-- actuator监控信息完善 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
    </dependencies>

</project>

(2)application.yml文件中增加如下配置信息

java 复制代码
server:
  port: 9527

spring:
  application:
    name: microservicecloud-zuul-gateway

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/ #http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: gateway-9527.com #这里用于修改eureka服务注册列表的status字段值,替换默认的展示
    prefer-ip-address: true #服务注册列表中的status字段值,其访问路径可以显示IP地址,而不是展示localhost

#如果不做如下配置,访问地址是 http://myzuul.com:9527/microservicecloud-goods/goods/list/
#会包漏出真实的服务地址,存在安全隐患
#如果增加了以下配置,可以采用 http://myzuul.com:9527/myrule/goods/list/
zuul:
  #prefix: /mycompany  #加上这个配置表示,访问必须要加前缀才能访问,否则无法正常访问,也即需要通过 http://myzuul.com:9527/mycompany/myrule/goods/list/ 来访问
  #ignored-services: microservicecloud-goods #不增加这条配置,两种路径(真实路径和路由路径都能访问),增加配置后,只能通过路由路径访问,从而实现了隐藏真实服务地址。如果有多个服务名称都需要隐藏,则可以用"*"代替
  routes:
    myrule.serviceId: microservicecloud-goods
    myrule.path: /myrule/**

info:
  app.name: company-microservicecloud
  company.name: www.company.com
  build.artifactId: $project.artifactId$
  build.version: $project.version$

(3)在启动类中增加注解@EnableZuulProxy

java 复制代码
package com.company.zuul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

/**
 * 启用路由时访问地址
 * http://myzuul.com:9527/microservicecloud-goods/goods/list/
 * 不用路由时访问地址
 * http://localhost:8001/goods/list/
 */
@SpringBootApplication
@EnableZuulProxy
public class Zuul9527Application {

    public static void main(String[] args) {
        SpringApplication.run(Zuul9527Application.class, args);
    }

}

创建好后,我们依次按序启动以下项目

Eureka server端项目microservicecloud-eureka-7001

服务提供者microservicecloud-provider-8001

zuul服务microservicecloud-zuul-gateway-9527

前面已经提到,zuul自身也会注册进eureka的注册中心,所以我们访问注册中心http://localhost:7001也能看到zuul服务,如下图

(三)zuul的使用

启动好相关项目后(microservicecloud-eureka-7001、microservicecloud-provider-8001、microservicecloud-zuul-gateway-9527),我们首先直接在浏览器地址栏访问服务提供者(microservicecloud-provider-8001)的接口localhost:8001/goods/list,如下图,我们可以看到服务能正常访问

接下来,我们通过Zuul的服务来访问,在浏览器地址栏输入localhost:9527/myrule/goods/list,如下图,我们发现也能正常调用服务提供者的该接口

这是因为我们在Zuul服务的application.yml配置文件中,做过了如下配置,其中zuul.routes.myrule.serviceId是指定了需要做代理的服务名称(因为服务提供者项目microservicecloud-provider-8001的application.yml中配置项spring.applicaiton.name=microservicecloud-goods),而zuul.routes.myrule.path则指定了替换的路径,即需要在服务提供者的原始接口(/goods/list)前面再增加/myrule才能访问(也即在zuul中则通过/myrule/goods/list可以访问)

另外我们发现通过zuul的localhost:9527/microservicecloud-goods/goods/list也能正常访问

也即在zuul中通过localhost:9527/microservicecloud-goods/goods/listlocalhost:9527/myrule/goods/list两种方式都能实现对服务提供者的/goods/list接口进行访问。一般出于安全方面考虑,我们可以通过在zuul项目中增加zuul.ignored-services=microservicecloud-goods来禁止通过localhost:9527/microservicecloud-goods/goods/list方式的访问(如果我们想忽略所有的服务,那么可以增加配置项zuul.ignored-services="*"即可)。

接下来我们在项目中增加zuul.ignored-services=microservicecloud-goods,如下图,然后重新启动项目microservicecloud-zuul-gateway-9527,然后我们发现现在依然能通过

localhost:9527/myrule/goods/list访问,但无法通过http://localhost:9527/microservicecloud-goods/goods/list访问了,如下图

通过/myrule/goods/list依然能正常访问

通过/microservicecloud-goods/goods/list无法访问

如果我们还希望在zuul中增加接口访问前缀,比如增加/mycompany前缀,那么可以通过在application.yml中增加配置项zuul.prefix=/mycompany,这样我们修改下配置,然后重启项目可以通过http://myzuul.com:9527/mycompany/myrule/goods/list/方式来访问了,如下图

以上就是zuul服务路由规则的配置及使用。

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
追风筝的人er5 天前
企业管理系统如何实现自定义首页与千人千面?RuoYi Office 给出了完整方案
vue.js·spring boot·spring cloud
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode