SpringCloud-Netflix学习笔记13——Zuul路由网关

news2024/11/17 8:47:00

什么是Zuul?

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

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

  注意:Zuul服务最终还是会注册进Eureka。

  提供:代理 + 路由 + 过滤 三大功能!

Zuul能干嘛

  • 路由
  • 过滤

  官网文档:https://github.com/Netflix/zuul

Zuul路由的基本配置

  1、新建一个子模块 springcloud-zuul-9527,并且添加依赖,依赖如下(其中Zuul 和 Eureka依赖是必要的):

    <!--实体类 + web-->
    <dependencies>
        <!--zuul路由-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <!--hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <!--hystrix监控依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <!--Ribbon-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <!--eureka服务提供者或者客户端用这个包-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.tang</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

  2、编写配置文件,端口为 9527,并且Zuul会以服务注册进Eureka ,所以一些Eureka的配置也必不可少,如下:

server:
  port: 9527
  # 应用名称,即该微服务的名称
spring:
  application:
    name: springcloud-zuul

# Eureka服务提供者的配置,服务注册到哪里,即注册中心的地址(搭建集群情况下)
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: springcloud-zuul-9527  # Eureka服务监控页面的Status,不配置的话会有默认值
    prefer-ip-address: true  # 为true,可以显示服务主机所在的ip,而不是默认的localhost
# 配置监控信息,即Status那个页面的信息
info:
  aap.name: tangshihua-springcloud
  company.name: org.tang.cn

  3、编写主启动类,添加注解 @EnableZuulProxy 开启Zuul路由,这里需要说明的是,用这个注解就能将该服务注册进Eureka了,不用加@EnableEurekaClient注解,代码如下:

@SpringBootApplication
@EnableZuulProxy  //开启Zuul路由代理(用这个注解就能将该服务注册进Eureka了,不用加@EnableEurekaClient注解)
public class ZuulApplication_9527 {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication_9527.class, args);
    }
}

  4、开启 ZuulApplication_9527、springcloud-provider-dept-hystrix-8001、springcloud-eureka-7001进行测试。可以看到Zuul被当成一个微服务注册进了 Eureka:

在这里插入图片描述

  此时我们直接访问8001端口的地址:http://localhost:8001/dept/queryDeptById/2 ,可以获取服务:
在这里插入图片描述

  我们也可以通过Zuul路由9527的地址对8001的服务进行访问,地址要加上服务名 springcloud-provider-dept(小写):

在这里插入图片描述
  我的为什么不是 localhost,而是 www.tangshihua.com 呢?因为我在 hosts 文件中做了映射,如下:
在这里插入图片描述
  文件地址在左上角。

请求拦截

  如果我们直接以服务名进行访问的话,就会暴露我们的微服务信息,很不安全,所以我们可以用一个自己定义的名字来替换掉访问地址中的微服务名字,在配置文件中配置即可,如下:

zuul:
  routes:
    # 将访问链接中的微服务名称,可以换成mydept,方便隐藏信息
    mydept.serviceId: springcloud-provider-dept
    mydept.path: /mydept/**

  现在我们不仅可以通过微服务名称访问服务,也可以通过mydept访问微服务,如下:
在这里插入图片描述

  虽然可以通过mydept访问微服务,但是通过微服务名称还是可以访问微服务,我们可以直接配置,让通过微服务名称直接访问不了微服务,配置如下:

zuul:
  ignored-services: springcloud-provider-dept  # 不能在使用这个路径访问了

  效果如下:

在这里插入图片描述
  如果有很多微服务需要隐藏的话,可以用通配符 * ,配置如下:

zuul:
  ignored-services: "*"  # 隐藏全部的真实路径,因为微服务可能有很多个,不可能把所有名称都写进来,直接用通配符

  效果是一样的,这里就不重复演示了。

  我们除了拦截请求之外,还可以对访问路径进行一些配置,比如加个前缀之类的,如下:

zuul:
  prefix: /tang   # mydept前面需要加一个/tang前缀才能正常访问

  现在要访问微服务的话,需要在地址上加一个前缀 /tang 才能正常访问,如果不加就访问不了,效果如下:
在这里插入图片描述

在这里插入图片描述

总结

  用户请求首先进入Zuul路由网关,通过网关进行路由或者拦截,配置十分方便!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/339183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最详细教你注册 ChatGPT,不会来找我

超强人工智能 ChatGPT 震撼来袭&#xff0c;它是美国人工智能研究实验室 OpenAI 新推出的一种自然语言处理工具&#xff0c;不想来体验一下嘛&#xff01;最详细教程手把手教你注册&#xff0c;不会来找我&#xff01; 准备工作 一个可以科学上网的工具&#xff0c;提供非 Ch…

文献阅读笔记 # CodeBERT: A Pre-Trained Model for Programming and Natural Languages

《CodeBERT: A Pre-Trained Model for Programming and Natural Languages》EMNLP 2020 (CCF-B)作者主要是来自哈工大、中山大学的 MSRA 实习生和 MSRA、哈工大的研究员。资源&#xff1a;code | pdf相关资源&#xff1a;RoBERTa-base | CodeNN词汇&#xff1a; bimodal: 双模态…

嵌入式设备搭建NFS环境(服务器/客户端、源码下载编译、文件系统适配、内核适配)

1、什么是nfs (1)NFS(Network File System)是网络文件系统&#xff0c;能让使用者访问网络上别处的文件就像在使用自己的计算机一样&#xff1b; (2)NFS是基于UDP/IP协议的应用&#xff0c;其实现主要是采用远程过程调用RPC机制&#xff0c;RPC提供了一组与机器、操作系统以及低…

CAS详解.

CAS这个机制就给实现线程安全版本的代码&#xff0c;提供了一个新的思路&#xff0c;之前通过加锁&#xff0c;把多个指令打包成整体&#xff0c;来实现线程安全。现在就可以考虑直接基与CAS来实现一些修改操作&#xff0c;也能保证线程安全&#xff08;不需要加锁&#xff09;…

OpenAi-chatgpt注册保姆级全网最详细注册教程2023年2月最新-

废话就不多说了&#xff0c;说多了浪费各位师傅的时间&#xff01;直接冲&#xff0c;在开始之前需要科学上网&#xff0c;就没其他要求了 1、访问https://chat.openai.com/auth/login 2、点击sign up,输入账号密码&#xff0c;点击Continue 3、之后会来到登陆页面&#xff0…

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(03)—— 创建 dataguard 数据库之前的准备工作

Oracle Dataguard&#xff08;主库为 Oracle rac 集群&#xff09;配置教程&#xff08;03&#xff09;—— 创建 dataguard 数据库之前的准备工作 / 本专栏详细讲解 Oracle Dataguard&#xff08;Oracle 版本为11g&#xff0c;主库为双节点 Oracle rac 集群&#xff09;的配置…

云计算|OpenStack|错误记录和解决方案(不定时更新)

前言&#xff1a; openstack的部署和使用是难度比较大的&#xff0c;难免会出现各种各样的问题&#xff0c;因此&#xff0c;本文将把一些在部署和使用openstack社区版时出现的错误做一个记录&#xff0c;并就每一个错误分析和解决问题。&#xff08;尽量记录比较经典的错误&a…

微搭低代码从入门到精通10-tab栏组件

在小程序中&#xff0c;如果你的页面是由多个组成的&#xff0c;往往涉及到页面切换的问题。那如何引导用户访问不同的页面呢&#xff1f;微搭中提供了tab栏组件来实现这个功能&#xff0c;本篇我们介绍一下这个组件的使用方法。 首先呢打开我们的应用编辑器&#xff0c;在左侧…

OJ刷题Day2 · 判断根结点是否等于子结点之和 · 删除有序数组中的重复项 · 合并两个有序链表 · 数组中的第K个最大元素(中等题)

一、判断根结点是否等于子结点之和二、删除有序数组中的重复项三、合并两个有序链表四、数组中的第K个最大元素&#xff08;中等题&#xff09;一、判断根结点是否等于子结点之和 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左…

SpringBoot + kotlin/java + Mybatis-Plus +Sqlite + Gradle多模块项目

前言 我自己的业务项目&#xff0c;先用kotlinspringboot 搭建&#xff0c; 发现gradle支持kts脚本&#xff0c;于是我就搭建试试。我就选用了最流行的Sqlite内嵌数据库,虽然H2也不错&#xff0c;但是Sqlite才是最流行的。orm框架我还是选择了Mybatis-Plus &#xff0c;为此中…

Spring Boot的创建和使用

目录 一、Spring Boot介绍 1.1 Spring Boot 是什么 1.2 Spring Boot的优点 二、Spring Boot 项目的创建 2.1 使用idea创建 2.1.1 安装Spring Boot Helper插件 2.1.2 创建 Spring Boot 项目 2.1.3 验证项目是否创建成功 2.2 使用网页创建 三、输出 hello world 一、S…

前端如何提升To B产品用户体验

云计算产品发展的早期常以技术为核心吸引客户&#xff0c;功能的实现是这一时期产品优先考虑的因素。经过数十年的发展&#xff0c;云计算行业已经进入了深耕细作的时代&#xff0c;市场的激烈竞争与云产品快速发展的同时&#xff0c;用户对产品的可用性与易用性也有了更高的要…

交换机中的冗余链路管理

一 交换机冗余链路许多交换机或交换机设备组成的网络环境中&#xff0c;通常使用一些备份连接&#xff0c;以提高网络的健全性&#xff0c;稳定性。备份连接也叫备份链路&#xff0c;冗余链路等。为了解决共享式局域网的碰撞问题&#xff0c;采用了交换机构成的交换式局域网&am…

C语言静态库、动态库的封装和注意事项

1、动态库、静态库介绍 参考博客&#xff1a;《静态库和动态库介绍以及Makefile》&#xff1b; 2、代码目录结构和编译脚本 参考博客&#xff1a;《实际工作开发中C语言工程的目录结构分析》&#xff1b; 3、编写库的流程 (1)明确需求:需求是否合理、需求的使用场景、需求可能遇…

chatgpt:人工智能的一次突破,如何正确的创建用户及使用

Chatgpt的正确创建及使用 chatgpt最近在国内也开始有声音了&#xff0c;其实早在去年12月初&#xff0c;该网站就已经可以在国外进行使用&#xff0c;而且很快渗透到了国外各行各业各个年龄段 &#xff0c;最火的当属国外很多学生用它来生成论文&#xff0c;关键是语句通顺&am…

如何开启多个独立Chrome浏览器

一、简介 作为测试或者开发人员&#xff0c;有些情况下会用到 Chrome 浏览器&#xff0c;但有时是同一个 Chrome 浏览器无法为我们提供隔离开的不同环境。这样 我们就需要清理 cache 、切换账号等&#xff0c;降低了我们的工作效率。今天的主题是如何开启多个独立的 Chrome 浏…

LayUI模板引擎渲染数据

前端模板引擎介绍 接上节Spring boot项目开发实战——&#xff08;LayUI实现前后端数据交换与定义方法渲染数据&#xff09; 模板引擎能简化开发&#xff0c;极大提高效率&#xff0c;小编之前使用过JSP和Thymeleaf&#xff0c;以及python的jinja2&#xff0c;这些是后端的模…

spring(二)-----------如何注入bean

我们从第三方框架mybatis为引&#xff0c;看看如何往spring中注入一个bean 1、纯mybatis开发生成一个mapper对象 如果不使用spring的情况下&#xff0c;mybatis想生成一个mapper对象大概需要做下面的操作&#xff1a; 假设我们有了一个TMapper接口&#xff0c;此时获取该map…

12款开源数据资产(元数据)管理平台选型分析(三)

如上&#xff0c;是ChatGPT的百度指数和微信指数&#xff0c;继2022年12月上旬技术圈火热之后&#xff0c;因为微软、谷歌等巨头的推广加持&#xff0c;ChatGPT成为全球大众热源的话题。各大媒体都在消费这波舆论红利&#xff0c;打开微信公众号&#xff0c;劈天盖地各种姿势的…

前后端学习

最近和锴哥想搞一下前后端接口的事儿&#xff0c;但是不会&#xff0c;所以打算再学学前后端的基础知识&#xff0c;之后好抄作业&#xff0c;做缝纫机&#xff1b;达哥觉得我浮躁&#xff0c;这次一定要支棱起来&#xff1b;这次开始&#xff0c;面向openai学习。 前后端学习1…