Первый опыт Spring Cloud Gateway

задняя часть Микросервисы GitHub Spring

При перепечатке просьба указывать источник:уууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууу одинЭта статья взята изБлог Фан Чжипэна

В этой статье описывается, как просто использовать Spring Cloud Gateway, из официального кейса Spring Cloud по адресу https://spring.io/guides/gs/gateway.

Введение

Spring Cloud Gateway — это платформа шлюза второго поколения, официально запущенная Spring Cloud, заменяющая шлюз Zuul. Как и трафик, шлюз играет очень важную роль в системе микросервисов.Общие функции шлюза включают маршрутизацию и пересылку, проверку разрешений и управление ограничением тока. В этой статье сначала используются официальные случаи, чтобы познакомить вас с некоторыми простыми функциями Spring Cloud.В последующих статьях я буду использовать подробные примеры и анализ исходного кода, чтобы подробно объяснить Spring Cloud Gateway.

Создать проект

Исходный код этого кейса скачивается сОфициальный случай, также доступный для скачивания на моем Github. Версия Spring Boot, используемая в проекте, — 2.0.5.RELEASE, а версия Spring Cloud — Finchley.SR1.

Создайте новый проект и назовите его sc-f-gateway-first-sight.Файл pom проекта относится к зависимостям, необходимым для проекта, включая spring boot и spring cloud, а также начальную зависимость шлюза spring-cloud- starter-gateway.Код выглядит следующим образом:

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

** Примечание. Подробные сведения о зависимостях файла pom см. в исходном коде. **

Создайте простой маршрут

В весеннем облачном шлюзе компонент RouteLocator используется для переадресации маршрута, запрос обрабатывается и, наконец, перенаправляется в нижестоящую службу цели. В этом случае запрос будет перенаправлен на адрес http://httpbin.org:80. код показывает, как показано ниже:


@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
       return builder.routes()
        .route(p -> p
            .path("/get")
            .filters(f -> f.addRequestHeader("Hello", "World"))
            .uri("http://httpbin.org:80"))
        .build();
    }
    
    }

В приведенном выше методе myRoutes bean-компонент RouteLocatorBuilder используется для создания маршрута, в дополнение к созданию маршрута RouteLocatorBuilder позволяет добавлять различныеpredicatesа такжеfilters, Смысл утверждения предикатов, как следует из названия, заключается в том, чтобы обрабатываться определенными маршрутами в соответствии с правилами конкретных запросов.Фильтры - это различные фильтры, которые используются для вынесения различных суждений и модификаций запросов.

Маршрут, созданный выше, может пересылать запросы "/get" на "httpbin.org/get". В пути...

Запустите проект Springboot, и в браузере http://localhost:8080/get браузер отобразит следующее:

{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", 
    "Cache-Control": "max-age=0", 
    "Connection": "close", 
    "Cookie": "_ga=GA1.1.412536205.1526967566; JSESSIONID.667921df=node01oc1cdl4mcjdx1mku2ef1l440q1.node0; screenResolution=1920x1200", 
    "Forwarded": "proto=http;host=\"localhost:8080\";for=\"0:0:0:0:0:0:0:1:60036\"", 
    "Hello": "World", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", 
    "X-Forwarded-Host": "localhost:8080"
  }, 
  "origin": "0:0:0:0:0:0:0:1, 210.22.21.66", 
  "url": "http://localhost:8080/get"
}

Видно, что когда мы запрашиваем «/get» у проекта шлюза, шлюз перенаправляет запрос проекта на «httpbin.org/get", и репостите его...

Обратите внимание, что HTTPBin показывает приветствие заголовка запроса и значение мира.

Использование Хайстрикс

Hystrix можно использовать в весеннем облачном шлюзе. Hystrix — сервисный предохранитель и компонент с пониженной версией в весеннем облаке, играющий очень важную роль в микросервисных системах. Hystrix используется в виде фильтра в весеннем облачном шлюзе, Код выглядит следующим образом:

   @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        String httpUri = "http://httpbin.org:80";
        return builder.routes()
            .route(p -> p
                .path("/get")
                .filters(f -> f.addRequestHeader("Hello", "World"))
                .uri(httpUri))
            .route(p -> p
                .host("*.hystrix.com")
                .filters(f -> f
                    .hystrix(config -> config
                        .setName("mycmd")
                        .setFallbackUri("forward:/fallback")))
                .uri(httpUri))
            .build();
    }

В приведенном выше коде мы используем другой маршрутизатор, который использует хост для подтверждения того, входит ли запрос в маршрут.Когда запрошенный хост имеет «*.hystrix.com», он войдет в маршрутизатор, а в маршрутизаторе есть hystrix. filter, фильтру можно присвоить имя и логический адрес, указывающий на резервный вариант, например, в данном случае перенаправление на «/fallback».

Теперь напишите логику «/fallback» l:


 @RequestMapping("/fallback")
    public Mono<String> fallback() {
        return Mono.just("fallback");
    }

Mono — это реактивный поток, который выводит во внешний мир «запасную» строку.

Выполните следующую команду, используя curl:

 curl --dump-header - --header 'Host: www.hystrix.com' http://localhost:8080/delay/3

Возвращаемый ответ:

fallback

Видно, что запрос с hostwww.hystrix.com выполняет логику отката hystrix.

Суммировать

В этой статье объясняется простое использование Spring Cloud Gateway на простом официальном примере В Spring Cloud Gateway есть две важные концепции.predicatesа такжеfilters, о чем будет рассказано в следующих статьях. Следите за обновлениями.

Загрузка исходного кода

GitHub.com/forephotos/День SP…


Отсканируйте код и подпишитесь на общедоступную учетную запись, чтобы получить сюрприз

(Просьба указывать автора и источник при перепечатке статей с этого сайтаБлог Фан Чжипэна)