在微服务架构中,每一个服务都是一个能够独立开发和运行的组件,而一个完整的微服务架构由一系列独立运行的微服务组成。其中每一个服务都只会完成特定领域的功能,好比订单服务提供与订单业务场景有关的功能、商品服务提供商品展现功能等。各个微服务之间经过轻量级通讯机制 REST API 或者 RPC 完成通讯。 微服务以后在某些层面会带来必定的影响,好比,一个用户查看一个商品的详情,对于客户端来讲,可能须要调用商品服务、评论服务、库存服务、营销服务等多个服务来完成数据的渲染在这个场景中,客户端虽然能经过调用多个服务实现数据的获取,可是会存在一 些问题,好比:html
因此,咱们能够在微服务以前增长一个前置节点,这个节点就是网关,网关就是一个网络链接到另外一个网络的“关口”。也就是网络。而在微服务架构中,它不只仅只是一个网络互连的一个关口,还有更多的做用,之前面分析的这个场景为例,增长网关以后全部请求的下发都由网关下发;对于商品详情展现的场景来讲,增长了 API 网关以后,在 API 网关层能够把后端的多个服务进行整合,而后提供一个惟一的业务接口,客户端只须要调用这个接口便可完成数据的获取及展现。在网关中会再去消费后端的多个微服务进行统一的整合,给客户端返回一个惟一的响应。去消费后端的多个微服务进行统一的整合,给客户端返回一个惟一的响应。java
从上面的案例来看,网关成了全部流量的入口,那么对于这样一个角色来讲,它须要在某些方面有很高的要求spring
常见的网关方案后端
网关选型api
它的总体工做原理以下。缓存
其中,predicate就是咱们的匹配条件;而filter,就能够理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就能够实现一个具体的路由了。客户端向 Spring Cloud Gateway 发出请求,若是请求与网关程序定义的路由匹配,则该请求就会被发送到网关 Web 处理程序,此时处理程序运行特定的请求过滤器链。过滤器之间用虚线分开的缘由是过滤器可能会在发送代理请求的先后执行逻辑。全部 pre 过滤器逻辑先执行,而后执行代理请求;代理请求完成后,执行 post 过滤器逻辑安全
新建一个spring-cloud-gateway服务网络
在spring-cloud-gateway服务中导入如下包架构
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
而后在配置文件中配置以下app
server: port: 9100 spring: application: name: spring-cloud-gateway cloud: gateway: routes: - predicates: - Path=/service/** filters: #过滤 - StripPrefix=1 uri: http://localhost:8080/ eureka: instance: hostname: localhost client: serviceUrl: defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ #指向服务注册中心的地址
启动项目经过网关访问业务服务,发现能够直接经过网关的端口发起访问
https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/#the-after-route-predicate-factory
这是官方提供的11种断言方法,有兴趣能够按官网的去配置玩下,cloud整个体系配置相对来讲很简单的
下面就写一个关于经常使用的Cookie配置下;
若是官网提供的断言不知足本身的要求,官网也支持自定义断言;自定义断言要继承AbstractRoutePredicateFactory这个抽象工厂,咱们自定义的断言类名后缀必须是RoutePredicateFactory;自定义也很简单也就是看别人怎么写的而后抄就完了
而后把以前测试工具的Cookies删除,调用成功