springCloud多机房部署路由配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springCloud多机房部署路由配置相关的知识,希望对你有一定的参考价值。

参考技术A 直接用官方文档的例子好了。。假设网关的地址是localhost:8080

若直接访问localhost:8080/test 则网关会匹配失败

结合一些filter更好用哦

假如应用访问地址是localhost:8001/app, 接口地址是/test,这里设置了prefixPath为/app, 那么当你访问localhost:8080/test, 网关在帮你转发请求之前,会在/test 前加上/app,转发时的请求就变成了localhost:8001/app/test。

这个filter比较灵活的就是可以进行正则匹配替换,如下的例子就是当请求localhost:8080/test时,匹配所有以/开头的路径,然后在前面加上/app,所以现在请求变成了localhost:8080/app/test。然后转发时的url变成了localhost:8001/app/test 。在测试的时候,这个filter是没办法使用模板进行匹配的。可能是因为它是用的正则进行匹配替换,所以没办法使用模板吧

值得注意的是在yml文档中 \ 。替换路径是使用的是String.replaceAll()方法,这个方法和replace()不同,是根据正则进行替换的。具体的替换规则感兴趣的话可以去了解一下Pattern。
https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

这个filter的使用方式比较简单。就是匹配到满足/a开头的路径后重新设置路径为以/app开头。

看到这里,大家应该大概了解了模板...的具体用法了吧。模板里面的变量可通过ServerWebExchange.getAttributes()获得。具体的请参看官方文档。

最后的最后,因为好奇三种关于path的filter能不能一起用,所以做了个测试。

但是!!我们来看看SetPathGatewayFilterFactory的apply方法。一进入这个方法,path(/test)就被记录下来了。当另外两个filter的return方法执行完了之后,才会执行这个方法的return 方法。最后路径就会被替换为/a/test。所以SetPathFilter和另外两个Filter是没办法同时生效滴!

最后的最后的最后。。来打脸了。这个filter的执行顺序和配置定义的顺序是有关系的。。

按照这个顺序的话,先执行的就是将 /test替换为 /a/test,然后替换为/api/a/test,最后替换为/app/api/test。。
由此得出的结论是只要SetPath这个filter在其他两个filter之前执行的话还是不冲突的。。

SpringCloud

参考技术A 微服务的优点:

1易于开发和维护,只需要关注每个服务的单独业务即可,不需要关心其他

2启动较快

3局部修改容易部署

4技术栈不受限

5按需伸缩

微服务的缺点:

1运维成本较高

3分布式复杂

4接口调整成本高

SpringCloud 的特点:

1约定优于配置

2开箱即用、快速启动

3适用于各种环境

4轻量级的组件,比如 服务发现组件 Eureka  ribbon  zuul

5组件的支持很丰富,功能很齐全 包含:配置中心,注册中心,智能路由

6选型中立 比如服务发现组件,不限制必须使用某一种,例如 Eureka,Zookeeper,Consul

Eureka作为服务注册中心,Eureka比Zookeeper好在哪里

著名的CAP理论指出,在一个分布式系统中, 一致性 (Consistency)、 可用性 (Availability)、分区容忍性(Partition tolerance 分区相当于对通信的时限要求)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

一致性(C):在 分布式系统 中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

可用性(A):在集群中一部分节点故障后, 集群 整体是否还能响应 客户端 的读写请求。(对数据更新具备高可用性)

分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。

由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此Zookeeper保证的是CP, 而Eureka则是AP。

传统分布式的模式的缺点

传统式是通过restTemplate硬编码硬性指定ip和端口一旦ip和端口改变name系统直接瘫痪,这个ip和端口改变是不可避免的。

springcloud是通过eureka作为服务的发现也就是注册中心就可以解决这个问题

eureka的集群:

  就是多个服务之间互相依赖你中有我我中有你

失效剔除和自我保护

默认每间隔60s服务就会通过心跳检测,检测超过90s没有响应的服务就会剔除,这时候在eureka的面板上就会有提示。

Ribbin 负载均衡

工作原理:

第一步先选择 Eureka Server, 它优先选择在同一个Zone且负载较少的Server;第二步再根据用户指定的策略

负载均衡的侧率:

1默认轮训,

2,随机

3,根据响应速度

开启默认负载均衡只需要价格注解LoadBalanced

@Bean

@LoadBalanced

public RestTemplate restTemplate()

    return new RestTemplate(new OkHttp3ClientHttpRequestFactory());



修改调用方式,不再手动获取ip和端口,而是直接通过服务名称调用:

以上是关于springCloud多机房部署路由配置的主要内容,如果未能解决你的问题,请参考以下文章

springCloud(14):使用Zuul构建微服务网关-路由端点与路由配置详解

springcloud 通过gateway路由转发调用接口很慢问题

Java springboot B2B2C o2o多用户商城 springcloud架构路由网关(zuul)

OSPF高级配置实操——大型公司环境部署

配置思科路由器Telnet 登陆

配置思科路由器Telnet 登陆