【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服务路由规则的配置及使用。

相关推荐
徐子童29 分钟前
《从零开始:Spring Cloud Eureka 配置与服务注册全流程》
spring·spring cloud·eureka
SunsPlanter1 小时前
PotPlayer 安装 madVR、LAV Filters 以提升解码能力和视频音频效果
学习
再看扣你眼2 小时前
系统安全及应用学习笔记
笔记·学习·系统安全
xiaohanbao092 小时前
day30 python 模块、包与库的高效使用指南
人工智能·python·学习·算法
虾球xz2 小时前
游戏引擎学习第295天:堆叠房间用于Z层调试
c++·人工智能·学习·游戏引擎
Lester_11014 小时前
嵌入式学习笔记 - STM32 U(S)ART 模块HAL 库函数总结
笔记·学习
芯动力小子4 小时前
MCU开发学习记录17* - RTC学习与实践(HAL库) - 日历、闹钟、RTC备份寄存器 -STM32CubeMX
单片机·学习·实时音视频
白云千载尽4 小时前
ip与mac-数据包传输过程学习
学习·tcp/ip·macos
虾球xz6 小时前
游戏引擎学习第292天:实现蛇
c++·学习·游戏引擎