Springboot 实践(11)Spring Cloud 与zuul 路由配置与应用

news2024/11/18 2:50:07

        前文讲解springboot cloud与consul的服务注册与发现,为多微服务程序互联互通做了准备;那么,各个微服务之间是直接调用IP或者域名实现接口调用,还是有其他方式呢?其实,可以通过搭建zuul服务,实现通过路由调用不同微服务。

        Zuul是Netflix开源的微服务网关;Spring Cloud对Zuul进行了整合与增强,Zuul默认使用的HTTP客户端是Apache HTTPClient,也可以使用RestClient或okhttp3.OkHttpClient。 Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/demo/test转发到到demo服务。

        zuul的核心是一系列的filters, 其作用类比Servlet框架的Filter,或者AOP。zuul把请求路由交到用户处理逻辑的过程中,这些filter参与一些过滤处理,比如Authentication,Load Shedding等

        Zuul使用一系列不同类型的过滤器,使我们能够快速灵活地将功能应用于我们的边缘服务。这些过滤器可帮助我们执行以下功能:

☆ 身份验证和安全性 - 确定每个资源的身份验证要求并拒绝不满足这些要求的请求

☆ 洞察和监控 - 在边缘跟踪有意义的数据和统计数据,以便为我们提供准确的生产视图

☆ 动态路由 - 根据需要动态地将请求路由到不同的后端群集

☆ 压力测试 - 逐渐增加群集的流量以衡量性能。

☆  Load Shedding - 为每种类型的请求分配容量并删除超过限制的请求

☆ 静态响应处理 - 直接在边缘构建一些响应,而不是将它们转发到内部集群

        下面我们讲解在项目中如何配置zuul动态路由。为了更好的验证上文讲解的服务注册与发现、及不同路由之间的跳转,我们重新建立一个新工程,命名为SpringbootAction-two,工程创建过程请参考文章“Springboot 实践(1)MyEclipse2019创建maven工程”,此处不做赘述!

1、新建SpringbootAction-two项目

        项目SpringbootAction-two,主要实现服务注册、不连接数据库,端口使用2886(区别于SpringbootAction-one的2885端口),项目配置过程,如下:

(1)配置pom.xml文件

  • Copy项目SpringbootAction-one中pom.xml文件,由于不连接数据库,注释如下代码:

   <!-- mysql -->

    <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

    </dependency>

    <!-- druid -->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>druid-spring-boot-starter</artifactId>

        <version>1.1.10</version>

</dependency>

(2)添加springboot启动函数

Copy项目SpringbootAction-one中ActionApp.java文件,修改配置注解,修改后如下:

//配置默认不启动数据链接;

@SpringBootApplication(scanBasePackages= {"com.SJL"},exclude = {

        DataSourceAutoConfiguration.class,

        DataSourceTransactionManagerAutoConfiguration.class,

        HibernateJpaAutoConfiguration.class})

@ComponentScan(basePackages= {"com.SJL"})

@EnableResourceServer  //配置启动资源服务器

@ServletComponentScan(basePackages= {"com.SJL"})

(3)添加配置文件

☆ Copy项目SpringbootAction-one中CorsConfig.java(跨域访问)、OAuthResourcesServerConfig.java(资源服务器配置)、SwaggerConfig.java(swagger-ui配置)、WebSecurityConfig.java(security配置)文件。

☆ 添加登录代码

☆ 添加登录跳转页面mainfunction.html(mainfunction主界面html页面名称)

(4) 启动项目

2、改造SpringbootAction-one项目

       (1)配置pom.xml文件

添加zuuljar包 

<!-- zuul -->

<dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>

            <version>2.0.0.RELEASE</version>

  </dependency>

<dependency>

            <groupId>org.springframework.security.oauth.boot</groupId>

            <artifactId>spring-security-oauth2-autoconfigure</artifactId>

            <version>2.0.1.RELEASE</version>

        </dependency>

(2)修改application.xml,添加如下路由设置:

zuul:

  host:

    socket-timeout-millis: 60000

    connect-timeout-millis: 60000

  #需要忽略的头部信息,不在传播到其他服务

  sensitive-headers: Access-Control-Allow-Origin

  ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Token,APPToken

  routes:

#路由配置完成之后,到WebSecurity放行配置路径

    SpringbootAction-one:

      path: /one/**

      serviceId: SpringbootAction-one

SpringbootAction-two:

      path: /two/**

      serviceId: SpringbootAction-two

(3)为启动类添加注解@EnableZuulProxy

(4)启动项目

SpringbootAction-one与SpringbootAction-two启动成功后,服务注册页面希纳是如下:

 

3、路由测试

(1)SpringbootAction-one项目测试

在浏览器中,输入http://localhost:2885/index,浏览器返回如下:

 

(2)SpringbootAction-two项目测试

在浏览器中,输入http://localhost:2885/two/index,浏览器返回如下:

 

备注:访问两个微服务使用的域名端口号均为http://localhost:2885,在访问SpringbootAction-two微服务时,使用“/two/index”进行路由跳转。

Springboot 实践(11)Spring boot 与zuul 配置与应用到此讲解结束;下文讲解spring cloud config配置与运用,实现yml文件的集中配置。

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

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

相关文章

左耳朵耗子:从一次经历谈 TIME_WAIT 的那些事

原文地址&#xff1a;https://coolshell.cn/articles/22263.html 今天来讲一讲TCP 的 TIME_WAIT 的问题。这个问题尽人皆知&#xff0c;不过&#xff0c;这次遇到的是不太一样的场景&#xff0c;前两天也解决了&#xff0c;正好写篇文章&#xff0c;顺便把 TIME_WAIT 的那些事都…

STM32入门学习之TFT_LCD显示

1.TFT_LCD简介&#xff1a;薄膜晶体管液晶显示器TFT_LCD(Thin Film Transistor-Liquid Crystal Display)在液晶显示屏的每一个像素上都设置有一个薄膜晶体管&#xff08;TFT&#xff09;&#xff0c;能够有效的克服非选择时的串扰&#xff0c;使显示屏的静态特性与扫描线数无关…

登录校验-Filter-详解

目录 执行流程 拦截路径 过滤器链 小结 执行流程 过滤器Filter拦截到请求之后&#xff0c;首先执行方放行之前的逻辑&#xff0c;然后执行放行操作&#xff08;doFilter&#xff09;&#xff0c;然后会访问对应的Web资源&#xff08;对应的Controller类&#xff09;&#…

【C++】进一步认识模板

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录 前言一、非类型模板参数二、模板的特…

Java学数据结构(3)——树Tree B树 红黑树 Java标准库中的集合Set与映射Map 使用多个映射Map的案例

目录 引出B树插入insert删除remove 红黑树(red black tree)自底向上的插入自顶向下红黑树自顶向下的删除 标准库中的集合Set与映射Map关于Set接口关于Map接口TreeSet类和TreeMap类的实现使用多个映射Map&#xff1a;一个词典的案例方案一&#xff1a;使用一个Map对象方案二&…

Leetcode.75 颜色分类

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这…

[管理与领导-50]:IT基层管理者 - 8项核心技能 - 5 - 沟通是润滑剂

目录 前言&#xff1a; 一、什么是沟通 1.1 定义 1.2 沟通模型 1.3 沟通的六层次模型 1.4 为什么需要沟通 二、沟通的五维度 三、沟通的原则 3.1 以终为始 3.2 双赢思维&#xff1a;人们只会做对自己有利的事 3.3 牵善的思维 四、沟通的过程 五、沟通技巧 六、深…

统计Mysql库中每个表的总行数,解决table_rows不准确问题

1、拼接SQL selectsubstring( GROUP_CONCAT(a.sf SEPARATOR ),1,length(GROUP_CONCAT(a.sf SEPARATOR ))-10) as sql_str from( select concat(select ", TABLE_name , ", count(*) as row_num from , TABLE_SCHEMA, .,TABLE_name, union all ) as sf frominformat…

matlab使用教程(25)—常微分方程(ODE)选项

1.ODE 选项摘要 解算 ODE 经常要求微调参数、调整误差容限或向求解器传递附加信息。本主题说明如何指定选项以及每个选项与哪些微分方程求解器兼容。 1.1 选项语法 使用 odeset 函数创建 options 结构体&#xff0c;然后将其作为第四个输入参数传递给求解器。例如&#xff0…

支付宝的支付

对于前端的入门学习的人员来说&#xff0c;支付宝提供的沙箱环境&#xff0c;可以让你体验支付的整个流程。 一、沙箱环境 沙箱&#xff08;又叫沙盘&#xff09;环境是用于开发者测试的模拟环境&#xff0c;中间发生任何行为都是虚拟的&#xff0c;如支付。 二、技术选型 支…

一文800字从0到1运用工具Postman快速导出python接口测试脚本

Postman的脚本可以导出多种语言的脚本&#xff0c;方便二次维护开发。 Python的requests库&#xff0c;支持python2和python3&#xff0c;用于发送http/https请求 使用unittest进行接口自动化测试 一、环境准备 1、安装python&#xff08;使用python2或3都可以&#xff09; …

前端组件库造轮子——Input组件开发教程

前端组件库造轮子——Input组件开发教程 前言 本系列旨在记录前端组件库开发经验&#xff0c;我们的组件库项目目前已在Github开源&#xff0c;下面是项目的部分组件。文章会详细介绍一些造组件库轮子的技巧并且最后会给出完整的演示demo。 文章旨在总结经验&#xff0c;开源…

基于Java+SpringBoot+Vue前后端分离科研工作量管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

c语言练习题33: 判断回⽂字符串

判断回⽂字符串&#xff1a; 题目&#xff1a; 输⼊⼀个字符串&#xff0c;判断这个字符串是否是回⽂字符串&#xff08;字符串的⻓度⼩于等于30&#xff0c;字符串不包含空 格&#xff09;&#xff0c;如果是回⽂字符串输出Yes&#xff0c;如果不是回⽂字符串输出No。 //回…

Hugging Face Transformer 的APIs应用实例

拥抱面变压器 API 简要摘要 一、说明 Hugging Face 的变压器库提供了广泛的 API&#xff0c;可用于处理各种 NLP 任务的预训练变压器模型。在本教程中&#xff0c;我们将探讨主要 API 并提供示例来帮助你了解它们的用法。 二、导入模型 1. 分词器接口&#xff1a; 分词器 AP…

浅谈分布式共识算法概念与演进

分布式共识是指在分布式系统中&#xff0c;多个节点之间达成共识的过程。 分布式共识的意义在于确保分布式系统中各个节点之间的数据一致性。通过分布式共识算法&#xff0c;可以使得多个节点针对某个状态达成一致&#xff0c;从而保证系统中各个节点之间的数据一致性。这对于…

应知道的16个Python基础知识

列表推导式 # 列表推导式,用一行代码生成一个有规律的列表 # 列表推导式,用一行代码生成一个有规律的列表 import randomlist_comprehension =[i for i in range(10)] print(list_comprehension)list_comprehension2 =[(x,y)for x in range(4) for y in range(5,10)] print(…

手写Spring源码——实现一个简单的spring framework

这篇文章主要带大家实现一个简单的Spring框架&#xff0c;包含单例、多例bean的获取&#xff0c;依赖注入、懒加载等功能。 一、创建Java项目 首先&#xff0c;需要创建一个Java工程&#xff0c;名字就叫spring。 创建完成后&#xff0c;如下图&#xff0c;再依次创建三级包 二…

Linux系统编程系列之进程基础

一、什么是进程 关于进程的定义很多&#xff0c;这里讲一种比较直接的&#xff0c;进程就是程序中的代码和数据被加载到内存中运行的过程&#xff0c;就是程序的执行过程。进程是动态的&#xff0c;而程序是静态的。程序存储在硬盘里&#xff0c;进程只有在程序被执行后&#x…

生信分析Python实战练习 1 | 视频18

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…