当前位置:   article > 正文

分布式开发之浅谈Gateway(服务网关)_gatewaycallbackmanager

gatewaycallbackmanager

一. Spring Cloud Gateway 介绍

Spring Cloud Gateway 基于 Spring Boot 2,是 Spring Cloud 的全新项目。Gateway 旨在提供一种简单而有效的途径来转发请求,并为它们提供横切关注点。

Spring Cloud Gateway 中最重要的几个概念:

  • 路由 Route:路由是网关最基础的部分,路由信息由一个 ID 、一个目的 URL 、一组断言工厂和一组 Filter 组成。如果路由断言为真,则说明请求的 URL 和配置的路由匹配。

  • 断言 Predicate:Java 8 中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是 Spring 5.0 框架中的 ServerWebExchange 。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自 Http Request 中的任何信息,比如请求头和参数等。

  • 过滤器 Filter:一个标准的 Spring Web Filter。Spring Cloud Gateway 中的 Filter 分为两种类型:Gateway Filter 和 Global Filter。过滤器 Filter 将会对请求和响应进行修改处理。

二. 入门案例

作为网关来说,网关最重要的功能就是协议适配和协议转发,协议转发也就是最基本的路由信息转发。

创建项目 gateway-server ,演示 Gateway 的基本路由转发功能,也就是通过 Gateway 的 Path 路由断言工厂实现 url 直接转发。

  1. 引入 Spring Cloud Gateway:Spring Cloud Routing > Gateway

    注意:Gateway 自己使用了 netty 实现了 Web 服务,此处『不需要引入 Spring Web』,如果引入了,反而还会报冲突错误,无法启动。

    1. <dependency>
    2.    <groupId>org.springframework.cloud</groupId>
    3.    <artifactId>spring-cloud-starter-gateway</artifactId>
    4. </dependency>
    5. <dependency>
    6.    <groupId>org.springframework.cloud</groupId>
    7.    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    8. </dependency>
    9. <dependency>
    10.    <groupId>org.springframework.boot</groupId>
    11.    <artifactId>spring-boot-starter-actuator</artifactId>
    12. </dependency>

  2. 编写主入口程序代码,如下:

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. public class GatewayServerApplication {
  4.    public static void main(String[] args) {
  5.        SpringApplication.run(GatewayServerApplication.class, args);
  6.   }
  7.    /**
  8.     * 配置
  9.     */
  10.    @Bean
  11.    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  12.        /**return builder.routes()
  13.            .route(r -> r
  14.                .path("/jd")
  15.                .uri("http://www.jd.com/")
  16.                .id("jd_route")
  17.            ).build();*/
  18.         return builder.routes().route(new Function<PredicateSpec, Route.AsyncBuilder>() {
  19.            @Override
  20.            public Route.AsyncBuilder apply(PredicateSpec predicateSpec) {
  21.                return predicateSpec.path("/jd")
  22.                       .uri("http://www.jd.com/")
  23.                       .id("jd_route");
  24.           }
  25.       }).build();
  26.   }
  27. }

3、application.yml


                
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/296532
推荐阅读
相关标签
  

闽ICP备14008679号