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

永州做网站哪里可以接网站开发项目做

永州做网站,哪里可以接网站开发项目做,修改wordpress评论,国外免备案域名一、网关简介 大家都都知道在微服务架构中#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在#xff0c;我们只能在客户端记录每个微服务的地址#xff0c;然后分别去用。 这样的架构#xff0c;会存在着诸多…一、网关简介 大家都都知道在微服务架构中一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在我们只能在客户端记录每个微服务的地址然后分别去用。 这样的架构会存在着诸多的问题: 每个业务都会需要鉴权、限流、权限校验、跨域等逻辑如果每个业务都各自为战。自己造轮子实现一遍会很蛋疼完全可以抽出来放到一个统一的地方去做。如果业务量比较简单的话这种方式前期不会有什么问题但随着业务越来越复杂比如淘宝、亚马逊打开一个页面可能会涉及到数百个微服务协同工作如果每一个微辰务都分配一个域名的话一方面客户端代码会很难维护涉及到数百个域名另一方面是连接数的瓶颈想象一下你打开一个APP通过抓包发现涉及到了数百个远程调用这在移动端下会显得非常低效。后期如果需要对微服务进行重构的话也会变的非常麻烦需要客户端配合你一起进行改造比如商品服务随着业务变的越来越复杂后期需要进行拆分成多个微服务这个时候对外提供的服务也需要拆分成多个同时需要客户端配合你进行改造非常蛋疼。 上面的这些问题可以借助API网关来解决。 所谓的API网关就是指系统的统一入口它封装了应用程序的内部结构为客户说提供统一服务一些与业务本身功能天关的公共逻辑可以在这里实现。诸如认证、鉴权、监控、路由转发等等,添加上API网关之后系统的架构图变成了如下所示: 1、什么是Spring Cloud Gateway 网关作为流量的入口常用的功能包括路由转发权限校验限流等。 Sping Cloud cGateway是Sping Clou官方推出的第二代网关框架定位于取代NeificZul。 相比Zul来说Spring Cloud Gateway提供更优秀的性能更强大的有功能。 Spring Cloud Gateway是由WebFlux Netty Reactor实现的响应式的API网关。它不能在传统的servlet容器中工作也不能构建成war包。 Sping Cloud Gateway旨在为微服务架构提供一种简单且有效的API路由的管理方式并基于Fiter的方式提供网关的基本功能例如说安全认证、监控、限流等等。 官网文档: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories Spring Cloud Gateway 功能特征 基于Spring Framework 5, Project Reactor和 Spring Boot 2.0进行构建;动态路由:能够匹配任何请求属性;支持路径重写;集成 Spring Cloud 服务发现功能(Nacos、Eruka) ;可集成流控降级功能(Sentinel、Hystrix) ;可以对路由指定易于编写的Predicate(断言和Filter (过滤器); 2、核心概念 路由(route) 路由是网关中最基础的部分路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真则说明请求的URL和配置的路由匹配。 断言(predicates) Java3中的断言函数SpringCloud Gateway中的断言函数类型是Sping5.0框架中的SeverieExctange。断言函数允许开发者去定义匹酷t request中的任何信息比加如请求头和参数等。 过滤器(Filter) SpringCloud Gateway中的filter分为Gateway Filler和Global Filter。Filter可以对请求和响应进行处理 3、工作原理 Spring Cloud Gateway的工作原理跟Zuul的差不多最大的区别就是Gateway的Filter只有pre和post 两种。 客户端向Spring Cloud Gateway发出请求如果请求与网关程序定义的路由匹配则该请求就会被发送到网关Web处理程序此时处理程序运行特定的请求过滤器链。过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后执行逻辑。所有pre过滤器逻辑先执行然后执行代理请求;代理请求完成后执行post过滤器逻辑。 二、Spring Cloud Gateway快速开始 1、环境搭建【基本环境搭建-实现路由】 注意:会和spring-webmvc的依赖冲突需要排除spring-webmvc dependencies!--gateway的依赖 springcloud 开发--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency/dependencies设置配置文件 server:port: 8088 spring:application:name: api-gateway # gateway的配置cloud:gateway:routes:- id: order_route #路由的唯一标识路由到orderuri: http://localhost:8020 #需要转发的地址#断言规则 用于路由规则的匹配predicates:- Path//# http://localhost:8088/order-serve/order/add 路由到↓# http://localhost:8020/order-serve/order/addfilters:- StripPrefix1 # 转发之前去掉第一次的路径# http://localhost:8020/order/add#- id: stock_route访问http://localhost:8088/order-serve/order/add 2、集成Nacos !-- nacos服务注册与发现 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencyserver:port: 8088 spring:application:name: api-gateway # gateway的配置cloud:gateway:routes:- id: order_route #路由的唯一标识路由到orderuri: lb://order-service # 需要转发的地址 lb指的是从nacos中按照名称获取微服务并遵循负载均衡策略 order-service服务名#断言规则 用于路由规则的匹配predicates:- Path/order-serve/**# http://localhost:8088/order-serve/order/add 路由到↓# http://localhost:8020/order-serve/order/addfilters:- StripPrefix1 # 转发之前去掉第一次的路径# http://localhost:8020/order/add#- id: stock_route# 配置Nacosnacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacos重新运行并访问 http://localhost:8088/order-service/order/add 设置约定集成nacos server:port: 8088 spring:application:name: api-gatewaycloud:# gateway的配置gateway:discovery:locator:enabled: true #是否启动自动识别nacos服务#配置Nacosnacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacos重新启动项目 访问服务名对应的地址http://localhost:8088/order-service/order/add 重新启动项目 访问http://localhost:8088/order/add 调整时间 重新运行项目 http://localhost:8088/order/add 3、路由断言工厂Route Predicate Factories配置 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories 作用:当请求gateway的时候 使用断言对请求进行匹配 如果匹配成功就路由转发如果匹配失败就返回404 类型:内置,自定义 SpringCloud Gateway包括许多内置的断言工厂,所有这些断言都与HTTP请求的不同属性匹配。具体如下: 基于Datetime类型的断工厂 此类型的断言根据时间做判断,主要有三个: AfterRoutePredicateFactory:接收一个日期参数, 判断请求日期是否晚于指定日期 BeforeRoutePredicateFactory:接收- 个日期参数,判断请求日期是否早于指定日期 BetweenRoutePredicateFactory:接收两个日期参数,判断请求日期是否在指定时间段内 - After2023-10-19T09:07:00.66008:00[Asia/Shanghai]基于远程地址的断言工厂 RemoteAddrRoutePredicateFactory:接收一个IP地址段,判断请求主机地址是否在地址段中 - RemoteAddr192.168.1.1/24基于Cookie的断言工厂 CookieRoutePredicateFactory:接收两个参数, cookie 名字和一个正则表达式。判断请求cookie是否具有给定名称且值与正则表达式匹配。 -Cookiechocolate, ch.基于Header的断言工厂 HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。判断请求Header是否具有给定名称且值与正则表达式匹配。 - HeaderX-Request-Id, \d重新启动项目 利用API工具发送请求 把Headers当中的请求参数取消重新发起请求会报错 基于Host的断言工厂 HostRoutePredicateFactory:接收一个参数, 主机名模式。判断请求的Host是否满足匹配规则。 -Host**.testhost.org基于Method请求方法的断言工厂 MethodRoutePredicateFactory:接收一个参数 判断请求类型是否跟指定的类型匹配。 重新启动测试 通过GET发送请求 通过POST发起请求 基于Query请求参数的断言工厂 设置必须传递参数为name的参数 - Queryname重新启动发起请求没有设置name参数报错 设置name参数 设置指定参数 - Queryname,xushu|zhuge设置name的参数只能是xushu或者zhuge否则断言失败 发送请求报错 将参数改为xushu请求成功改为zhuge也请求成功 基于路由权重的断言工厂 WeightRoutePredicateFactory:接收-个[组名 权重]然后对于同-一个组内的路由按照权重转发 routes:-id: weight_ route1uri: host1predicates:-Path/ product/**-Weightgroup31-id: weight_ route2uri: host2predicates:- Path/ product/**-Weight group3 94、自定义路由断言工厂 自定义路由断言工厂需要继承AbstractRoutePredicateFactory类,重写apply方法的逻辑。 在apply方法中可以通过exchange. getRequest()倒ServerHttpRequest对象从而可以获取到请求的参数、请求方式、请求头等信息。 1、必须是Spring组件bean 2、类必须加上RoutePredicateFactory作为结尾 3、必须继承AbstractRoutePredicateFactory 4、必须声明静态的内部类 声明属性来接受配置文件当中配置的断言信息 5、需要结合shortcutFieldOrder进行绑定 6、通过apply方法进行逻辑判断 true 就是匹配成功 false就是匹配失败 注意:命名需要以RoutePredicateFactory结尾 Component public class CheckAuthRoutePredicateFactoryextends AbstractRoutePredicateFactoryCheckAuthRoutePredicateFactory.Config {public CheckAuthRoutePredicateFactory() {super(CheckAuthRoutePredicateFactory.Config.class);}Overridepublic ListString shortcutFieldOrder() {return Arrays.asList(name);}Overridepublic PredicateServerWebExchange apply(CheckAuthRoutePredicateFactory.Config config) {return new GatewayPredicate() {Overridepublic boolean test(ServerWebExchange exchange) {if(config.getName().equals(xushu)){return true;}return false;}};}// 用于接收配置文件中 断言的信息Validatedpublic static class Config {private String name;public String getName() {return name;}public void setName(String name) {this.name name;}}} 重新启动项目 访问http://localhost:8088/order/add 修改对应的断言名称 查询启动 http://localhost:8088/order/add 5、过滤器工厂( GatewayFilter Factories)配置 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayilter-factories 5.1、添加请求头参数 filters:- AddRequestHeaderX-Request-color,redRequestMapping(/header)public String header(RequestHeader(X-Request-color) String color){return color;}重新启动两个项目 http://localhost:8088/order/header 5.2、添加请求参数 - AddRequestParametercolor,blueRequestMapping(/parameter)public String parameter(RequestParam(color) String color){return color;}http://localhost:8088/order/parameter 5.3、为匹配的路由统一添加前缀 servlet:context-path: /mall-order- PrefixPath/mall-order #添加前缀对应微服务需要配置context-path重新启动两个项目 访问http://localhost:8088/order/add 现在访问http://localhost:8020/mall-order/order/add 然而访问8082必须携带前缀 http://localhost:8020/mall-order/order/add 5.4、配置重定向 - RedirectTo302, https://www.baidu.com访问http://localhost:8088/order/add 重定向到了百度 5.5、自定义状态码 - SetStatus 404访问http://localhost:8088/order/add 虽然访问成功了但是返回的状态码为404 6、自定义过滤器工厂 继承AbstractNameValueGatewayFilterFactory且我们的自定义名称必须要以GatewayFilterFactory结尾并交给spring管理。 创建CheckAuthGatewayFilterFactory /****/ Component public class CheckAuthGatewayFilterFactoryextends AbstractGatewayFilterFactoryCheckAuthGatewayFilterFactory.Config {public CheckAuthGatewayFilterFactory() {super(Config.class);}Overridepublic ListString shortcutFieldOrder() {return Arrays.asList(value);}Overridepublic GatewayFilter apply(Config config) {return new GatewayFilter() {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {String nameexchange.getRequest().getQueryParams().getFirst(name);if(StringUtils.isNotBlank(name)){if(config.getValue().equals(name)){return chain.filter(exchange);}else {// 返回404exchange.getResponse().setStatusCode(HttpStatus.NOT_FOUND);return exchange.getResponse().setComplete();}}// 正常请求return chain.filter(exchange);}};}public static class Config {private String value;public String getValue() {return value;}public void setValue(String value) {this.value value;}}} - CheckAuthxushu7、全局过滤器Global Filters 局部过滤器和全局过滤器的区别 局部针对某个路由需要在路由中进行配置 全局针对所有路由请求一旦定义就会投入使用 GlobalFilter接口和GatewayFilter有一样的接口定义 只不过GlobalFilter 会作用于所有路由。 Component public class LogFilter implements GlobalFilter {Logger log LoggerFactory.getLogger(this.getClass());Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(exchange.getRequest().getPath().value());return chain.filter(exchange);} } 重新启动http://localhost:8088/order/add?namexushu 8、Reactor Netty访问日志 要启用Reactor Netty访问日志请设置 -Dreactor.netty.http.server.accessLogEnabledtrue它必须是Java系统属性,而不是Spring Boot属性。 您可以将日志记录系统配置为具有单独的访问日志文件。以下示例创建一个Logback配置: appender name accessLog classch.qos.logback.core.FileAppenderfileaccess_log.log/fileencoderpattern%msg%n/pattern/encoder /appenderappender name async classch.qos.logback.classic.AsyncAppenderappender-ref refaccessLog / /appenderlogger namereactor.netty.http.server.AccessLog levelINFO additivityfalseappender-ref ref async/ /logger8.1、Gateway跨域配置(CORS Configuration) 通过ym|配置的方式 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#cors-configuration globalcors:cors-configurations:[/**]: # 允许跨域访问的资源allowedOrigins: * #跨域允许的来源 例如www.smsm.comallowedMethods:- GET- POST- PUT模拟跨域请求设置发起请求的页面 !DOCTYPE html html langen headmeta charsetUTF-8titleTitle/titlescript srchttp://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js/script /head bodydiv table border1theadtrthid/ththusername/ththage/th/tr/theadtbody iduserlist/tbody/table/divinput typebutton value用户列表 onclickgetData()scriptfunction getData() {$.get(http://localhost:8088/order/add,function(data){alert(data)});}/script /body /html访问网页 allowedOrigins: localhost:8088 #跨域允许的来源 例如www.smsm.com再次访问访问网页抛出跨域异常 设置*运行所有的来源访问 Spring自带的跨域方式 Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod(*); //允许运行methodconfig.addAllowedOrigin(*); //允许的来源config.addAllowedHeader(*); //允许的请求头参数// 允许访问的资源UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration(/**,config);return new CorsWebFilter(source);} }
http://www.zqtcl.cn/news/331193/

相关文章:

  • 保定模板建站平台微网站怎么做的好
  • 肇庆网站建设方案维护做学校网站素材图片素材
  • 新潮远网站建设建什么类型个人网站
  • 泉州中小企业网站制作洛浦县网站建设
  • 做游戏视频网站用什么程序好wordpress 地址修改
  • 大连的网站建设阳西网站seo
  • 网站制作电话多少网站商品图片怎么做
  • 定制做网站平台网站什么情况要更新
  • 上海网站建设哪家国外有哪些网站可以做电商
  • 网络软文推广网站wordpress仿站抓取软件
  • 安徽圣力建设集团网站当当网站建设与易趣网站对比
  • 长沙网站设计制作DW做注册网站
  • 商城设计网站关键词的优化在哪做
  • 网站锚文本网络营销的解释
  • 苏州专业网站建设网站模板是什么
  • 科技网站设计案例百度收录情况查询
  • gif放网站有锯齿策划公司宣传语
  • 淘宝客做网站怎样推广空间购买后打不开网站
  • 信阳网站设计银川网站建设nx110
  • 建设安全协会网站58招聘运营网站怎么做
  • 做原创的网站做游戏平面设计好的素材网站有哪些
  • 校园网站wordpress 防攻击插件
  • wordpress 更好的主题丁的老头seo博客
  • 上海市工程信息网站北京专业网站翻译影音字幕翻译速记速记速记速而高效
  • 网站建设心得体会500字网页制作三剑客是指什么
  • 大连做网站优化一级a做爰片 网站就能看
  • 网站优化页面中山seo网络推广
  • 建设网站一定要数据库吗湖北百度seo
  • 下载了wordpress然后怎么用怎样健建设一个有利于优化的网站
  • 网站开发心得500字做代售机票网站程序