热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ipv4子网前缀长度,天翼网关局域网设置有什么用

作者:smdkfdBoCloud|前言作为NetflixZuul的替代者,SpringCloudGateway是一款非常实用的微服务网关,在SpringCloud微服


作者: smdkfdBoCloud|


前言作为Netflix Zuul的替代,Spring Cloud网关是一个非常实用的微服务网关,在Spring Cloud微服务体系结构中起着非常大的作用。 本文组织了spring云网关的常见使用场景,以帮助微服务开发人员。


微服务网关SpringCloudGateway


1 .概述spring云网关是spring基于Spring 5.0、Spring Boot2.0、项目reactor等技术正式开发的网关,spring云网关是微服务作为Spring Cloud生态系统中的网关,Spring Cloud网关不仅提供统一的路由选择,而且还提供了安全性、监控/嵌入点和流


2 .核心概念网关提供API的完全管理服务,提供丰富的API管理功能,帮助企业管理大型API,降低管理成本和安全风险,实现协议匹配、协议传输、安全策略、防刷、防草网关暴露到外部的URL或接口信息通常统称为路由信息。 任何开发过网关中间件或使用过Zuul的人都知道网关的中心是过滤器和过滤器通道(过滤器责任链)。 sprig云网关也有路由和过滤器概念。 以下是spring云网关的一些重要概念。


路由。 路由是网关的最基本部分,路由信息包括ID、目标URL、断言组和过滤器组。 如果断言根为true,则表示请求的URL与配置匹配


断言。 Java8断言函数。 Spring Cloud Gateway断言函数的输入类型是Spring5.0框架的ServerWebExchange。 Spring Cloud Gateway断言函数允许开发人员定义匹配来自http请求的任何信息,包括请求标头和参数。


过滤器。 是标准的spring web过滤器。 spring cloud网关过滤器有两种类型的过滤器:网关过滤器和全局过滤器。 过滤器过滤器过滤器修改处理请求和响应


来自spring cloud网关的请求。 然后,在网关处理程序映射中找到与请求匹配的路由,并将其发送到网关网络处理程序。 Handler通过指定的过滤器链将请求发送回实际的服务执行业务逻辑。


快速启动以开发Spring Boot框架为例,启动以Consul为注册中心的网关服务模块和后端服务模块。 客户端请求通过网关服务将请求路由到后端服务。


先决条件:


控制:1.5.0版。 spring bot:2.1.5版。 spring cloud:Greenwich.sr1版本。 redis:5.0.5版。 1 .微服务开发


下面是一个使用Spring Boot框架开发微服务的示例。 启动服务并注册Consul。


部署依赖关系:


org.spring framework.cloud spring-cloud-starter-Consul-discovery在consul中注册服务,配置文件如下:


spring : application : name : service-consumer cloud : consul : host :127.0.0.1 port 3:8500 discovery 3360


@ rest controller @ request mapping (/user ) ) publicclassusercontroller ) @ resourceprivateuserserviceuserservice; @getmapping(value='/info ' ) public User info ) { return userService.info; }


注:这是服务器端设置,通过网关将请求路由转发到服务器。


2 .网关配置


创建引入以下依赖关系的网关服务:


org.spring帧. cloud spring-cloud-starter-gateway org.spring帧. cloud spring-cloud-starter-consul


@ springbootapplication @ enablediscoveryclientpublicclassgatewayapplication { publicstaticvoidmain { string [ ] args } { spririprid }

run(GatewayApplication.class, args);}

}

Spring Cloud Gateway对client端请求起到路由功能,主要配置如下:

server:port: 8098spring:application:name: service-gatewaycloud:gateway: discovery: locator: enabled: true lower-case-service-id: true consul: host: 127.0.0.1 #注册gateway网关到consul port: 8500 discovery: service-name: service-gateway

此时使用http://localhost:8089/service-consumer/user/info访问服务,网关即可对服务进行路由转发,把请求转发到具体后端服务上。此时,url中使用的url前缀service-consumer,是后端服务在Consul注册的服务名称转为小写字母以后的字符串。

最佳实践

01 Gateway网关配置

本文第二部分开发规范中定义了网关进行路由转发的配置,除了上述配置方式还可以使用下面的方式进行配置:

gateway: discovery: locator: enabled: true lower-case-service-id: true routes: - id: service_consumer uri: lb://service-consumer predicates: - Path= /consumer/** filters: - StripPrefix=1

在上面的配置中,配置了一个Path的predicat,将以/consumer/**开头的请求都会转发到uri为lb://service-consumer的地址上,lb://service-consumer(注册中心中服务的名称)即service-consumer服务的负载均衡地址,并用StripPrefix的filter 在转发之前将/consumer去掉。同时将spring.cloud.gateway.discovery.locator.enabled改为false,如果不改的话,之前的http://localhost:8081/service-consumer/user/info这样的请求地址也能正常访问,因为这时为每个服务创建了2个router。

本文第二部分和本节一共讲述了两种配置方式,两种配置都可以实现请求路由转发的功能。参数spring.cloud.gateway.discovery.locator.enabled为true,表明Gateway开启服务注册和发现的功能,并且Spring Cloud Gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。spring.cloud.gateway.discovery.locator.lowerCaseServiceId是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了)。

gateway: discovery: locator: enabled: true lower-case-service-id: true

02 Gateway跨域访问

Spring Cloud Gateway还针对跨域访问做了设计,可以使用以下配置解决跨域访问问题:

spring:cloud:gateway: globalcors: corsConfigurations: '[/**]': allowedOrigins: "https://docs.spring.io" allowedMethods: - GET allowHeaders: - Content-Type

在上面的示例中,允许来自https://docs.spring.io的get请求进行访问,并且表明服务器允许请求头中携带字段Content-Type。

03 Gateway 过滤器

Spring Cloud Gateway的filter生命周期不像Zuul那么丰富,它只有两个:“pre”和“post”:

pre:这种过滤器在请求被路由之前调用。可以利用这个过滤器实现身份验证、在集群中选择请求的微服务、记录调试的信息。

post:这种过滤器在路由到服务器之后执行。这种过滤器可用来为响应添加HTTP Header、统计信息和指标、响应从微服务发送给客户端等。

Spring Cloud gateway的filter分为两种:GatewayFilter和Globalfilter。GlobalFilter会应用到所有的路由上,而Gatewayfilter将应用到单个路由或者一个分组的路由上。

利用Gatewayfilter可以修改请求的http的请求或者是响应,或者根据请求或者响应做一些特殊的限制。更多时候可以利用Gatewayfilter做一些具体的路由配置。

下面的配置是AddRequestParameter Gatewayfilter的相关配置。

spring:application:name: service-gatewaycloud:gateway: discovery: locator: enabled: true routes: - id: parameter_route uri: http://localhost:8504/user/info filters: - AddRequestParameter=foo, bar predicates: - Method=GET

上述配置中指定了转发的地址,设置所有的GET方法都会自动添加foo=bar,当请求符合上述路由条件时,即可在后端服务上接收到Gateway网关添加的参数。

另外再介绍一种比较常用的filter,即StripPrefix gateway filter。

配置如下:

spring:cloud:gateway: routes: - id: stripprefixfilter uri: lb://service-consumer predicates: - Path=/consumer/** filters: - StripPrefix=1

当client端使用http://localhost:8098/consumer/user/info路径进行请求时,如果根据上述进行配置Gateway会将请求转换为http://localhost:8098/service-consumer/user/info。以此作为前端请求的最终目的地。

04 Gateway请求匹配

Gateway网关可以根据不同的方式进行匹配进而把请求分发到不同的后端服务上。

通过header进行匹配,把请求分发到不同的服务上,配置如下:

spring:cloud:gateway: routes: - id: header_route uri: http://baidu.com predicates: - Header=X-Request-Id, d+

通过curl测试:curl http://localhost:8080 -H "X-Request-Id:666666


推荐阅读
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
author-avatar
sharon_chan的秘密花园
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有