当前位置: 首页 > news >正文

【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 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文件中增加如下配置信息

server:port: 9527spring:application:name: microservicecloud-zuul-gatewayeureka: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-goodsmyrule.path: /myrule/**info:app.name: company-microservicecloudcompany.name: www.company.combuild.artifactId: $project.artifactId$build.version: $project.version$

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

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/list和localhost: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服务路由规则的配置及使用。

相关文章:

  • docker-compose——安装mongo
  • 搜索引擎工作原理|倒排索引|query改写|CTR点击率预估|爬虫
  • 构建集成差异化灵巧手和先进机器人控制技术的自动化系统
  • Active Directory域环境信息收集实战指南
  • 【网络入侵检测】基于Suricata源码分析运行模式(Runmode)
  • 【诊所电子处方专用软件】佳易王个体诊所门诊电子处方开单管理系统:零售药店电子处方服务系统#操作简单#诊所软件教程#药房划价
  • 【C++ - 仿mudou库one thread one loop式高并发服务器实现】
  • IntraWeb 16.0.2 + Bootstrap 4 居中布局实战(附源码+效果图)
  • 5000 字总结CSS 中的过渡、动画和变换详解
  • 数据库blog1_信息(数据)的处理与效率提升
  • Unity序列化字段、单例模式(Singleton Pattern)
  • Redis 发布订阅模式深度解析:原理、应用与实践
  • 制作大风车动画
  • Mipsel固件Fuzzing小记
  • 永磁同步电机公式总结——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程
  • Node.js 源码架构详解
  • 【磁盘清理】C盘告急,给JetBrains缓存文件搬个家
  • <input type=“number“>不显示的原因
  • NBA足球赛事直播源码体育直播M33模板赛事源码
  • CSS- 4.1 浮动(Float)
  • 中国首颗地质行业小卫星“浙地一号”成功发射
  • 哈马斯与以色列在多哈举行新一轮加沙停火谈判
  • 首次公布!我国空间站内发现微生物新物种
  • 刘国中将出席第78届世界卫生大会并顺访瑞士、访问白俄罗斯
  • 讲座|消逝之钟:《红楼梦》与《布登勃洛克一家》中的时间观
  • 李公明︱一周书记:当前科学观中的盲点、危机与……人类命运