Zuul网关_vue动态路由和静态路由的区别

Zuul网关_vue动态路由和静态路由的区别1.微服务架构所面临的问题?1)针对某个功能,客户端在微服务架构的情况下需要请求多个模块接口2)针对于身份认证、日志、流量控制等公共模块每个微服务都需要做一遍,不利于业务与非业务的拆分针对于这些问题,Zuul可完美解决,我们可用Zuul做:1)客户端只需要知道网关而不需要知道具体模块的地址,所有服务由网关对外提供2)身份认证类…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.微服务架构所面临的问题?

    1)针对某个功能,客户端在微服务架构的情况下需要请求多个模块接口

    2)针对于身份认证、日志、流量控制等公共模块每个微服务都需要做一遍,不利于业务与非业务的拆分

    针对于这些问题,Zuul可完美解决,我们可用Zuul做:

    1)客户端只需要知道网关而不需要知道具体模块的地址,所有服务由网关对外提供

    2)身份认证类的东西单独抽象出来,业务模块只做业务

2.Zuul网关构建

    1)在SpringBoot工程 part-1-website 中添加依赖,如下

		<!-- spring-cloud-starter-hystrix -->
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-zuul</artifactId>
	</dependency>
        
    <parent>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-parent</artifactId>
		<version>Dalston.SR1</version>
		<relativePath />
	</parent>

    2)在Application上添加@EnableZuulProxy注解,开启Zuul网关服务

@EnableZuulProxy
public class WebsiteApp {
}

    3)设置该工程应用名称、端口号等信息

# 应用名称
spring:
  application:
    name: part-1-website
#端口
server:
  port: 1102

    以上即成功构建应用,以下为请求路由方式

3.Zuul的几种请求路由方式

    准备工作:

        1)启动一个高可用的Eureka-server

        2)创建一个服务应用,以对外提供接口服务

        3)复制一份该服务端服务,除了端口号不一致其他都保持一致,尤其spring.application.name要保持一致,用于验证在外部请求到达时是否负载均衡

        具体可参考笔者另一篇文章 Ribbon负载均衡的使用方式与配置方式详解_恐龙弟旺仔的博客-CSDN博客_ribbon设置负载方式    

        笔者在本示例中服务应用名称设置为 part-1-sms-interface ,全部四个应用启动后,访问eureka可看到Zuul网关_vue动态路由和静态路由的区别

    以上:PART-1-EUREKA即为高可用eureka-server;PART-1-SMS-INTERFACE即为对外服务应用,提供/sms/test服务

    1)传统路由

    * 单实例配置(通过zuul.routes.<route>.path和zuul.routes.<route>.url参数对的方式来配置)

    在application.properties文件中添加路由规则即可

#route rule
zuul.routes.part-1-website.path=/part-1-website/**
zuul.routes.part-1-website.url=http://localhost:1109/

    注意:以上规则即说明,对当前website应用的所有以 /part-1-website开始的请求路径全部转发到http://localhost:1109上;

        如果是请求localhost:1102/part-1-website/sms/test即会转发到localhost:1109/sms/test上,即实现对PART-1-SMS-INTERFACE的服务访问

    * 多实例配置(通过zuul.routes.<route>.path和zuul.routes.<route>.serviceId参数对的方式来配置)

    在application.properties文件中添加如下路由规则即可

zuul.routes.part-1-website.path=/part-1-website/**
zuul.routes.part-1-website.serviceId=website
website.ribbon.listOfServers=http://localhost:1108/,http://localhost:1109/

    注意:与单实例不同就是:通过serviceId和listOfServers来确定path和url的对应关系;

          website读者可自定义,只要保持与listOfServers保持一致即可,servers值即PART-1-SMS-INTERFACE服务对应的应用IP:端口    

    2)服务路由配置

    通过Zuul和Eureka的整合,实现对服务实例的自动化维护

    在这种情况下,我们不需要像传统路由那样为serviceId指定具体的服务实例地址,只需要将path和serviceId对应上

    注意:实现这种方式,需要引入eureka依赖,并将zuul实例注册到eureka中

    在application.properties文件中添加如下路由规则

zuul.routes.part-1-website.path=/part-1-website/**
zuul.routes.part-1-website.service-id=part-1-sms-interface

eureka.client.service-url.defaultZone=http://eureka1:1001/eureka/

    注意:service-id即为要调用的服务名称;需要将本应用注册到eureka

4.过滤器

    过滤负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

    Zuul的过滤器使用方式如下:

    1)创建一个类,继承com.netflix.zuul.ZuulFilter

public class AccessFilter extends ZuulFilter{

	@Override
	public boolean shouldFilter() {
		return true;
	}

	@Override
	public Object run() {
		RequestContext context = RequestContext.getCurrentContext();
		HttpServletRequest request = context.getRequest();
		//也可获取其他参数,如response、
		String token = request.getParameter("accessToken");
		if(StringUtils.isEmpty(token)){
			context.setSendZuulResponse(false);
			context.setResponseStatusCode(401);
			context.setResponseBody("has no accessToken");
		}
		return null;
	}

	@Override
	public String filterType() {
		return "pre";
	}

	@Override
	public int filterOrder() {
		return 0;
	}
}

    注意:需实现ZuulFilter的abstract方法;

        shouldFilter:true表示需要过滤;false表示不需要

        filterType:

            * pre 请求被路由之前被调用(一般做一些前置加工)

            * route 在路由请求时调用(将外部请求转发到具体的服务实例上)

            * post 路由请求返回时调用(包装加工返回信息)

            * error 处理请求发生错误时调用

        filterOrder:通过数字来表示filter的执行顺序

        run:做真正的逻辑处理

    2)在Application下创建@Bean,将此Filter作为一个bean注入

	@Bean
	public AccessFilter accessFilter(){
		return new AccessFilter();
	}

    3)重启应用后,发出请求,如果request中没有添加AccessToken,则会收到报错,说明Filter生效

参考:Spring Cloud微服务实战

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170620.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【愚公系列】2022年03月 漏洞扫描与利用之AWVS「建议收藏」

    【愚公系列】2022年03月 漏洞扫描与利用之AWVS「建议收藏」实验步骤一首先需要添加一个扫描目标,先不进行登陆操作:设置爬虫扫描开始扫描得出网站目录如果需要账号密码则需要设置方式一:方式二:之后点击“save”,保存后就可以进行扫描备注:FullScan–使用FullScan来发起一个扫描的话,Acunetix会检查所有可能得安全漏洞。HighRishVulnerabilities–这个扫描选项将仅仅只会检查那些对web站点影响最大的缺陷漏洞。Cross-SiteScripting(XSS)–XXS漏洞扫描只会检测跨站

    2022年9月23日
    3
  • onedrive免费扩容25t_onedrive怎么免费扩容1T

    onedrive免费扩容25t_onedrive怎么免费扩容1TOneDrive存储我们都知道没有开office365,自己onedrive的储存空间只有5GB,onenote做笔记以及用onedrive同步文档空间不够,但是又不想开office365;所以在网上看到别人说onedrive可以推荐别人注册,可以扩容10GB;加起来一共15GB,用来做笔记完全够用;或许有大佬会说可以弄到Office教育版的微软账号,有5T或1T的存储空间,但是这个会涉及到账号里面文档的安全性,这种账号是属于教育机构的,全局管理员可以有权查看里面储存的文件并且有权删去账号,这样的

    2025年10月17日
    2
  • windows的host文件的位置和作用建议收藏

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\

    2021年12月20日
    76
  • windows启动mongo服务_启动windows

    windows启动mongo服务_启动windows在windows下启动mongodb,安装在这里不再赘述。1.打开运行窗口输入cmd,切换到mongodb的bin文件目录下;2.mongodb的data可以放在你自行创建的目录下,这里放在:F:\mongodb\dataFile输入命令:mongod –dbpath “F:\mongodb\dataFile”,如下:E:\MongoDB\bin>

    2025年7月17日
    5
  • idea好用的插件推荐_CodeDate插件安装

    idea好用的插件推荐_CodeDate插件安装提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结i一、pandas是什么?二、使用步骤1.引入库2.读入数据总结Listitem系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步

    2022年10月17日
    3
  • nginx负载均衡原理简介_nginx负载均衡配置详解

    nginx负载均衡原理简介_nginx负载均衡配置详解nginx负载均衡中常见的算法及原理有哪些?Nginx可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能httpupstream配置参数#自定义一组服务器,配置在http块内upstreamname{server………..}#示例upstreambackend{serverbackend1.example.comweight=5;server127.0.

    2022年9月25日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号