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

图片点开是网站怎么做上海装修公司名字

图片点开是网站怎么做,上海装修公司名字,手机如何制作代码,中国最大的手表网站注#xff1a;本文并不涉及具体功能是怎么实现的#xff0c;而只是微服务技术栈的整体总结和理解。 目录 一.基础概念--认识微服务 1.单体架构 2.分布式架构 3.微服务 4.SpringCloud 二.服务的拆分原则 三.RestTemplate--实现不同服务之间的通信与远程调用 四.Eurek…注本文并不涉及具体功能是怎么实现的而只是微服务技术栈的整体总结和理解。 目录 一.基础概念--认识微服务 1.单体架构 2.分布式架构 3.微服务 4.SpringCloud 二.服务的拆分原则 三.RestTemplate--实现不同服务之间的通信与远程调用 四.Eureka注册中心----假如服务提供者部署多个实例怎么对服务进行管理和实现负载均衡/请求分配 1.Eureka的结构和作用 2.实践步骤 3.总结 五.Ribbon负载均衡--SpringCloud是怎么实现负载均衡的与Ribbon饥饿加载的开启 1.为什么我们只输入了service名称就可以访问了呢 2.原理总结 3.负载均衡策略 4.自定义负载均衡策略 5.饥饿加载 六.Nacos注册中心--来自阿里的另一款注册中心相比于Nacos多了集群和环境隔离等概念更好分配请求 1.认识Nacos 2.使用Nacos 【1】Nacos需要下载 【2】依赖和配置文件不同 【3】访问地址不同 3.服务分级存储模型--创建集群实现优先访问本集群的服务 4.权重配置--实现不同服务器的性能不同分配的请求不同 5.环境隔离--创建namespace实现不同namespace的服务不可见 6.Nacos与Eureka的区别 七.Nacos配置管理--集中管理各个服务的配置 1.统一配置管理 【1】在nacos中添加配置文件 【2】从微服务拉取配置 2.配置热更新 3.配置共享 八.Feign远程调用--比RestTemplate更优雅地实现远程调用 1.使用 2.自定义配置 3.Feign使用优化 4.可能更好的一些书写方法--抽取各个接口的Client和DataObject到feign-api包中给其他模块引用 九.Gateway服务网关--统一管理过滤器 1.为什么需要网关 2.网关搭建基础步骤 3.断言工厂--判断请求路径是否符合条件 4.过滤器工厂--对路由的请求或响应做加工处理 【1】路由过滤器--GatewayFilter--使用已经提供好的过滤器功能只对当前路由生效 【2】默认过滤器--DefaultFilters--使用已经提供好的过滤器功能对所有路由都生效 【3】全局过滤器--GlobalFilter--自定义功能 5.过滤器执行顺序 6.跨域问题 一.基础概念--认识微服务 1.单体架构 概念将业务的所有功能集中在一个项目中开发打成一个包部署。 优点架构简单部署成本低。 缺点耦合度高维护困难升级困难。 2.分布式架构 概念根据业务功能对系统做拆分每个业务功能模块作为独立项目开发称为一个服务。 优点降低服务耦合有利于服务升级和拓展 缺点复杂度增加工作量增加 打工人的无奈╮(╯▽╰)╭不管是开发还是运维嘞。 3.微服务 服务拆分有很多问题需要思考比如服务拆分的粒度如何界定服务之间如何调用服务的调用关系如何管理所以人们需要制定一套行之有效的标准来约束分布式架构。 微服务的架构特征 单一职责微服务拆分粒度更小每一个服务都对应唯一的业务能力做到单一职责 自治团队独立技术独立数据独立独立部署和交付 面向服务服务提供统一标准的接口与语言和技术无关 隔离性强服务调用做好隔离容错降级避免出现级联问题 微服务的上述特性其实是在给分布式架构制定一个标准做到高内聚低耦合。 总结可以认为微服务是一种经过良好架构设计的分布式架构方案。 4.SpringCloud SpringCloud是目前国内使用最广泛的微服务框架。官网https://spring.io/projects/spring-cloudSpringCloud集成了各种微服务功能的组件并基于SpringBoot实现了这些组件的自动装配从而提供了良好的开箱即用体验。 其中的组件包括 另外SpringCloud底层是依赖于SpringBoot的并且有版本兼容关系如下 注一定要注重版本兼容关系 二.服务的拆分原则 任何分布式架构都离不开服务的拆分微服务也是一样。 微服务拆分时的几个原则 不同微服务不要重复开发相同业务。 微服务数据独立不要访问其他微服务的数据库。 微服务可以将自己的业务暴露为接口供其他微服务调用。 【比如将一个服务拆分为订单微服务和用户微服务订单服务如果需要查询用户信息只能调用用户服务的Restful接口不能查询用户数据库。】 三.RestTemplate--实现不同服务之间的通信与远程调用 其实RestTemplate严格来说是springboot的内容。 上面说到不同服务之间要相互访问对方的数据库只能访问对方的接口那怎么访问对方的接口呢 有写过爬虫程序或者调用过第三方平台api的小伙伴一定听说过httpClient。 但是这种方法使用起来有点繁琐。所以Spring进一步封装了库提供更为简洁的资源请求方式RestTemplate。类似RedisTemplate Service public class OrderService {Autowiredprivate OrderMapper orderMapper;//新增autowiredAutowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order orderMapper.findById(orderId);//2和3是重点//2.远程查询User//2.1 . url地址String urlhttp://localhost:8081/user/order.getUserId();//2.2发起调用User userrestTemplate.getForObject(url,User.class);//3.存入orderorder.setUser(user);// 4.返回return order;} } 概念补充提供者与消费者 在服务调用关系中会有两个不同的角色 服务提供者一次业务中被其他未服务调用的服务。提供接口给其他微服务 服务消费者一次业务中调用其他微服务的服务。调用其他微服务提供的接口 但是服务提供者与服务消费者的角色并不是绝对的而是相对于业务而言。 四.Eureka注册中心----假如服务提供者部署多个实例怎么对服务进行管理和实现负载均衡/请求分配 假如我们的服务提供者部署了多个实例如图 那么就需要思考几个问题 有多个user-service实例地址order-service调用时该如何选择 order-service如何得知某个user-service实例是否依然健康是不是已经宕机。 1.Eureka的结构和作用 有了注册中心可以 【1】对信息进行注册以后远程调用的时候只需书写服务名即可。 【2】可以将坏掉的服务器剔除 【3】当由多台服务器都提供接口还可以实现请求的负载均衡分配。 2.实现原理 问题一order-service在发起远程调用的时候该如何得知user-service实例的ip地址和端口 user-service服务实例启动后将自己的信息注册到eureka-serverEureka服务端。这个叫服务注册。eureka-server注册中心保存服务名称到服务实例地址列表的映射关系。order-service根据服务名称拉取实例地址列表。这个叫服务发现或服务拉取。 问题二有多个user-service实例地址order-service调用时该如何选择 order-service从实例列表中利用负载均衡算法选中一个实例地址。想该实例地址发起远程调用。 向该实例地址发起远程调用。 问题三order-service如何得知某个user-service实例是否依然健康是不是已经宕机。user-service会每个一段时间默认30秒向eureka-server发起请求报告自己状态称为心跳。 当超过一定时间没有发送心跳时eureka-server会认为微服务实例故障将该实例从服务列表剔除。 order-service拉取服务时就能将故障实例排除了。 注意一个微服务既可以是服务提供者又可以是服务消费者因此eureka将服务注册服务发现等功能统一封装到了eureka-client端。 3.实践步骤 搭建注册中心搭建EurekaServer--服务注册将user-service,order-service都注册到eureka--服务发现【服务拉取和开启负载均衡】在order-service中完成服务拉取然后结合各服务的状况通过负载均衡算法挑选一个服务实现远程调用 4.总结 有了注册中心可以 【1】对信息进行注册以后远程调用的时候只需书写服务名即可。 【2】可以将坏掉的服务器剔除 【3】当由多台服务器都提供接口还可以实现请求的负载均衡分配。 实现的话简单说就是建立一个注册中心管理服务提供者在这个服务中心中存储着服务名称到服务实例地址列表的映射关系和各个服务的状态。 这样当消费者请求服务提供者的时候就可以根据负载均衡算法选择合适的实例地址发起请求。并且还有心跳机制服务提供者会每隔一段时间向eureka-server请求中心发起请求报告自己状态从而即时发现故障的服务实例将其从服务列表剔除。 五.Ribbon负载均衡--SpringCloud是怎么实现负载均衡的与Ribbon饥饿加载的开启 SpringCloud底层其实是利用了一个名为Ribbon的组件来实现负载均衡功能的。 1.为什么我们只输入了service名称就可以访问了呢 为什么我们只输入了service名称就可以访问了呢之前还要获取ip和端口。 显然有人帮我们根据service名称获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor这个类会在对RestTemplate的请求进行拦截然后从Eureka根据服务id获取服务列表随后利用负载均衡算法得到真实的服务地址信息替换服务id。 2.原理总结 SpringCloud Ribbon的底层采用了一个拦截器拦截了RestTemplate发出的请求对地址做了修改。用一幅图来总结一下 3.负载均衡策略 负载均衡的规则都定义在IRule接口中而IRule有很多不同的实现类 不同规则的含义如下 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对以下两种服务器进行忽略 1在默认情况下这台服务器如果3次连接失败这台服务器就会被设置为“短路”状态。短路状态将持续30秒如果再次连接失败短路的持续时间就会几何级地增加。 2并发数过高的服务器。如果一个服务器的并发连接数过高配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限可以由客户端的clientName.clientConfigNameSpace.ActiveConnectionsLimit属性进行配置。WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长这个服务器的权重就越小。这个规则会随机选择服务器这个权重值会影响服务器的选择。ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。BestAvailableRule忽略那些短路的服务器并选择并发数较低的服务器。RandomRule随机选择一个可用的服务器。RetryRule重试机制的选择逻辑 默认的实现就是ZoneAvoidanceRule是一种轮询方案 4.自定义负载均衡策略 通过定义IRule实现可以修改负载均衡规则有两种方式 【1】代码方式在order-service中的OrderApplication类中定义一个新的IRule Bean public IRule randomRule(){return new RandomRule(); } 【2】配置文件方式在order-service的application.yml文件中添加新的配置也可以修改规则 userservice: # 给某个微服务配置负载均衡规则这里是userservice服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 注:一般用默认的负载均衡规则不做修改。 5.饥饿加载 饥饿加载与懒加载的区别 因为数据量较小、频繁访问所以使用饥饿加载更为合适。 Ribbon默认是采用懒加载即第一次访问时才会去创建LoadBalanceClient请求时间会很长。 而饥饿加载则会在项目启动时创建降低第一次访问的耗时在eureka-server通过下面配置开启饥饿加载 ribbon:eager-load:enabled: trueclients: userservice 六.Nacos注册中心--来自阿里的另一款注册中心相比于Nacos多了集群和环境隔离等概念更好分配请求 1.认识Nacos 阿里巴巴开发的SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 Nacos是阿里巴巴的产品现在是和Eureka一样也是SpringCloud中的一个组件。相比Eureka功能更加丰富在国内受欢迎程度较高。 Nacos是SpringCloudAlibaba的组件而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说并没有太大区别。 2.使用Nacos Nacos与Eureka在使用上还是有几点不同的。 【1】Nacos需要下载 与Nacos不同Eureka是我们自己创建一个服务并编写配置运行作为配置中心。而Nacos则是要去github下载软件解压运行作为配置中心。 【2】依赖和配置文件不同 这点毫无疑问两个不同的组件引入的依赖和所需要书写的配置文件自然也就不同。 【3】访问地址不同 nacos需要访问的地址端口号是在软件的配置文件修改http://127.0.0.1:8848/nacos eureka需要访问的地址端口号是在代码的配置文件修改http://127.0.0.1:10086/eureka 3.服务分级存储模型--创建集群实现优先访问本集群的服务 一个服务可以有多个实例例如我们的user-service可以有: 127.0.0.1:8081 127.0.0.1:8082 127.0.0.1:8083 假如这些实例分布于全国各地的不同机房例如 127.0.0.1:8081在上海机房 127.0.0.1:8082在上海机房 127.0.0.1:8083在杭州机房 Nacos就将同一机房内的实例 划分为一个集群。 也就是说user-service是服务一个服务可以包含多个集群如杭州、上海每个集群下可以有多个实例形成分级模型如图 微服务互相访问时应该尽可能访问同集群实例因为本地访问速度更快。当本集群内不可用时才访问其它集群。例如 杭州机房内的order-service应该优先访问同机房的user-service。 有了Nacos我们可以给不同的服务配置其对应的集群。 然后修改Ribbon的负载均衡规则改为Nacos提供的根据同集群优先来实现负载均衡的实现NacosRule。 这样就实现了微服务互相访问时尽可能访问同集群实例。当本集群内不可用时才访问其它集群。 4.权重配置--实现不同服务器的性能不同分配的请求不同 实际部署中会出现这样的场景 服务器设备性能有差异部分实例所在机器性能较好另一些较差我们希望性能好的机器承担更多的用户请求。 但默认情况下NacosRule是同集群内随机挑选不会考虑机器的性能问题。 因此Nacos提供了权重配置来控制访问频率权重越大则访问频率越高。 在nacos控制台找到user-service的实例列表点击编辑在弹出的编辑窗口即可修改权重。 注意如果权重修改为0则该实例永远不会被访问 5.环境隔离--创建namespace实现不同namespace的服务不可见 Nacos提供了namespace来实现环境隔离功能。 nacos中可以有多个namespace namespace下可以有group、service等 不同namespace之间相互隔离例如不同namespace的服务互相不可见 实现步骤1在页面中的命名空间中创建namespace 2在配置文件中给微服务配置namespace 6.Nacos与Eureka的区别 Nacos的服务实例分为两种l类型 1临时实例如果实例宕机超过一定时间会从服务列表剔除默认的类型。 2非临时实例如果实例宕机不会从服务列表剔除也可以叫永久实例。 Nacos与eureka的共同点 都支持服务注册和服务拉取 都支持服务提供者心跳方式做健康检测 Nacos与Eureka的区别 Nacos支持服务端主动检测提供者状态临时实例采用心跳模式非临时实例采用主动检测模式 临时实例心跳不正常会被剔除非临时实例则不会被剔除 Nacos支持服务列表变更的消息推送模式服务列表更新更及时 Nacos集群默认采用AP方式当集群中存在非临时实例时采用CP模式Eureka采用AP方式 七.Nacos配置管理--集中管理各个服务的配置 Nacos除了可以做注册中心同样可以做配置管理来使用。 Nacos一方面可以将配置集中管理另一方面可以在配置变更时及时通知微服务实现配置的热更新。 1.统一配置管理 当微服务部署的实例越来越多达到数十、数百时逐个修改微服务配置就会很麻烦而且很容易出错。我们需要一种统一配置管理方案可以集中管理所有实例的配置。这时候Nacos就出场了。具体怎么做呢 【1】在nacos中添加配置文件 如何在nacos中管理配置呢 点击网页的配置列表在对应的表单中填写配置信息即可。 注意项目的核心配置需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。 【2】从微服务拉取配置 微服务要拉取nacos中管理的配置并且与本地的application.yml配置合并才能完成项目启动。 但如果尚未读取application.yml又如何得知nacos地址呢 因此spring引入了一种新的配置文件bootstrap.yaml文件会在application.yml之前被读取流程如下 因此我们只需要 1在服务中引入nacos-config依赖 2添加bootstrap.yml并编写对应信息 3然后会根据application中的spring.cloud.nacos.server-addr获取nacos地址再根据bootstrap.yml中的${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id来读取配置 4最后在业务中使用Value注解来使用配置。 简单说就是创建bootstrap配置文件根据里面的信息找到nacos中对应的配置文件进而获取到存储在nacos中的配置然后再使用Value注解来使用配置。 2.配置热更新 我们最终的目的是修改nacos中的配置后微服务中无需重启即可让配置生效也就是配置热更新。 要实现配置热更新可以使用ConfigurationProperties注解和RefreshScope注解。 3.配置共享 微服务启动时可能会去nacos读取多个配置文件例如 [spring.application.name]-[spring.profiles.active].yaml例如userservice-dev.yaml [spring.application.name].yaml例如userservice.yaml 而[spring.application.name].yaml不包含环境因此可以被多个环境共享。 当nacos、服务本地同时出现相同属性时优先级有高低之分 八.Feign远程调用--比RestTemplate更优雅地实现远程调用 1.使用 RestTemplate发起远程调用的代码不够优雅Feign是一个声明式的http客户端帮助我们优雅的实现http请求的发送。 使用Feign的步骤 ① 引入依赖 ② 在启动类添加EnableFeignClients注解 ③ 建立clients包里面编写各个服务的FeignClient接口 ④ 使用FeignClient中定义的方法代替RestTemplate 可以看到其实就是将url全部提取到接口中书写从而将代码从两行简化为一行。并且使得之前都是getForObject这类相同名字的方法更有区分度见名知意。 2.自定义配置 Feign可以支持很多的自定义配置如下表所示 类型作用说明feign.Logger.Level修改日志级别包含四种不同的级别NONE、BASIC、HEADERS、FULLfeign.codec.Decoder响应结果的解析器http远程调用的结果做解析例如解析json字符串为java对象feign.codec.Encoder请求参数编码将请求参数编码便于通过http请求发送feign. Contract支持的注解格式默认是SpringMVC的注解feign. Retryer失败重试机制请求失败的重试机制默认是没有不过会使用Ribbon的重试 日志的级别分为四种 NONE不记录任何日志信息这是默认值。 BASIC仅记录请求的方法URL以及响应状态码和执行时间 HEADERS在BASIC的基础上额外记录了请求和响应的头信息 FULL记录所有请求和响应的明细包括头信息、请求体、元数据。 一般情况下除了日志级别FULL其他经常定为默认值就能满足我们使用如果要自定义时只需要修改配置文件或者创建自定义的Bean覆盖默认Bean即可。 3.Feign使用优化 Feign底层发起http请求依赖于其它的框架。其底层客户端实现包括 •URLConnection默认实现不支持连接池 •Apache HttpClient 支持连接池 •OKHttp支持连接池 因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。我们只需要引入连接池的依赖并增加配置即可。 4.可能更好的一些书写方法--抽取各个接口的Client和DataObject到feign-api包中给其他模块引用 将Feign的Client抽取为独立模块并且把接口有关的DataObject、默认的Feign配置都放到这个模块中提供给所有消费者使用。 例如将UserClient、User、Feign的默认配置都抽取到一个feign-api包中所有微服务引用该依赖包即可直接使用。 九.Gateway服务网关--统一管理过滤器 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目该项目是基于 Spring 5.0Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 1.为什么需要网关 Gateway网关是我们服务的守门神所有微服务的统一入口。 架构图 以往单体项目中都有过滤器或者是过滤器链来校验请求路由是否合法并进行鉴权和决定放行。 而网关也是由过滤器和过滤器链组成就相当于把各个单体项目中的过滤器和过滤器链提取到网关服务中。 网关的核心功能特性1权限控制网关作为微服务入口需要校验用户是是否有请求资格如果没有则进行拦截。2路由和负载均衡一切请求都必须先经过gateway但网关不处理业务而是根据某种规则把请求转发到某个微服务这个过程叫做路由。当然路由的目标服务有多个时还需要做负载均衡。3限流当请求流量过高时在网关中按照下流的微服务能够接受的速度来放行请求避免服务压力过大。 相比于之前单体项目的过滤器链多了负载均衡和限流的功能。 在SpringCloud中网关的实现包括两种gateway和zuul Zuul是基于Servlet的实现属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux属于响应式编程的实现具备更好的性能。 2.网关搭建基础步骤 网关搭建步骤 创建项目引入nacos服务发现和gateway依赖 配置application.yml包括服务基本信息、nacos地址、路由 路由配置包括 路由id路由的唯一标示 路由目标uri路由的目标地址http代表固定地址lb代表根据服务名负载均衡 路由断言predicates判断路由的规则 路由过滤器filters对请求或响应做处理 例如 server:port: 10010 # 网关端口 spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- id: user-service # 路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡后面跟服务名称predicates: # 路由断言也就是判断请求是否符合路由规则的条件- Path/user/** # 这个是按照路径匹配只要以/user/开头就符合要求 3.断言工厂--判断请求路径是否符合条件 我们在配置文件中写的断言规则只是字符串这些字符串会被Predicate Factory读取并处理转变为路由判断的条件 例如Path/user/**是按照路径匹配这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来 处理的像这样的断言工厂在SpringCloudGateway还有十几个: 名称说明示例After是某个时间点后的请求- After2037-01-20T17:42:47.789-07:00[America/Denver]Before是某个时间点之前的请求- Before2031-04-13T15:14:47.43308:00[Asia/Shanghai]Between是某两个时间点之前的请求- Between2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]Cookie请求必须包含某些cookie- Cookiechocolate, ch.pHeader请求必须包含某些header- HeaderX-Request-Id, \dHost请求必须是访问某个host域名- Host.somehost.org,.anotherhost.orgMethod请求方式必须是指定方式- MethodGET,POSTPath请求路径必须符合指定规则- Path/red/{segment},/blue/**Query请求参数必须包含指定参数- Queryname, Jack或者- QuerynameRemoteAddr请求者的ip必须是指定范围- RemoteAddr192.168.1.1/24Weight权重处理 4.过滤器工厂--对路由的请求或响应做加工处理 知识回顾过滤器的作用是什么 对路由的请求或响应做加工处理比如添加请求头等操作。 【1】路由过滤器--GatewayFilter--使用已经提供好的过滤器功能只对当前路由生效 GatewayFilter是网关中提供的一种过滤器可以对进入网关的请求和微服务返回的响应做处理。 Spring提供了31种不同的路由过滤器工厂 。例如 名称说明AddRequestHeader给当前请求添加一个请求头RemoveRequestHeader移除请求中的一个请求头AddResponseHeader给响应结果中添加一个响应头RemoveResponseHeader从响应结果中移除有一个响应头RequestRateLimiter限制请求的流量 正因为这些过滤器工厂的存在我们只要书写对应配置就能完成对应功能。例如 spring:cloud:gateway:routes:- id: user-service uri: lb://userservice predicates: - Path/user/** filters: # 过滤器- AddRequestHeaderflyingpig # 添加请求头 【2】默认过滤器--DefaultFilters--使用已经提供好的过滤器功能对所有路由都生效 GatewayFilter只对当前路由的请求生效而DefaultFilters对所有路由都生效的过滤器。 如果要对所有的路由都生效则可以将过滤器工厂写到default下。 【3】全局过滤器--GlobalFilter--自定义功能 前面的路由过滤器和默认过滤器网关提供了31种但每一种过滤器的作用都是固定的。如果我们希望拦截请求做自己的业务逻辑则没办法实现。就需要用到全局过滤器。 全局过滤器的作用也是处理一切进入网关的请求和微服务响应与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义处理逻辑是固定的而GlobalFilter的逻辑需要自己写代码实现。 5.过滤器执行顺序 请求进入网关会碰到三类过滤器当前路由的过滤器、DefaultFilter、GlobalFilter 请求路由后会将当前路由过滤器和DefaultFilter、GlobalFilter合并到一个过滤器链集合中排序后依次执行每个过滤器 排序的规则是什么呢 每一个过滤器都必须指定一个int类型的order值order值越小优先级越高执行顺序越靠前。 GlobalFilter通过实现Ordered接口或者添加Order注解来指定order值由我们自己指定 路由过滤器和defaultFilter的order由Spring指定默认是按照声明顺序从1递增。 当过滤器的order值一样时会按照 defaultFilter 路由过滤器 GlobalFilter的顺序执行 6.跨域问题 之前单体项目是在单体项目的过滤器中解决的。网关的话只需要配置添加下面的配置 spring:cloud:gateway:# 。。。globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:[/**]:allowedOrigins: # 允许哪些网站的跨域请求 - http://localhost:8090allowedMethods: # 允许的跨域ajax的请求方式- GET- POST- DELETE- PUT- OPTIONSallowedHeaders: * # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期
http://www.pierceye.com/news/165616/

相关文章:

  • 淘宝客网站建设平台怎么获取网站数据做统计数据
  • 做网站找外包公司要要搞清楚什么抖音开放平台是干嘛的
  • 可以中英切换的网站怎么做四川住房建设厅官方网站
  • 网站制作网站设计优客工场 网站开发
  • 微网站建设开发用系统建购物网站
  • 小说网站建立浙江省和住房建设厅网站
  • 网站去掉后缀html代码运行框wordpress6
  • 做问卷的几个网站石家庄建站源码
  • 响应式网站的制作刷排名seo软件
  • 深圳方维网站设计公司做公司网站的
  • 21年网站搭建公司排行榜域名建设网站
  • 建设银行网银官方网站摄影大赛官网
  • 最好网站设计案例php网站开发能挣多钱
  • 长沙网站推广平台西安网站建设 app
  • 如何查网站是哪家公司做的不用付费的正能量软件
  • 上海专业网站制作设计访问网站速度很慢
  • 大概开发一个网站多少钱百度搜索引擎的网址
  • 众筹网站哪家好网站免费推广怎么做
  • 搜狗站长线上营销策划方案
  • goggle营销型网站效果网站建设的种类
  • 建设银行网站注册企业类似返利网的网站建设
  • pc端网站建设碳晶板全屋装修的利和弊
  • 网站开发层次wordpress源码之家
  • 农产品电商网站建设的总体目标阿里云域名注册入口官网
  • 义乌个人兼职做建设网站做网站月收入多少
  • 福州网站seo优化公司徐州百度运营中心
  • 做网站需要用到ps吗中国十大最强装饰公司
  • 网站建设盈利去除wordpress rss图标
  • 网站策划书的基本内容东莞工程建设交易中心网
  • 免费推广网站入口2022静态网站开发外文文献