Menjelajahi Gerbang Awan Musim Semi Baru

1. Ikhtisar

Dalam artikel ini, kita akan menjelajahi fitur-fitur utama proyek Spring Cloud Gateway, API baru berdasarkan Spring 5, Spring Boot 2, dan Project Reactor.

Alat ini menyediakan mekanisme perutean out-of-the-box yang sering digunakan dalam aplikasi layanan mikro sebagai cara untuk menyembunyikan beberapa layanan di balik satu fasad.

Untuk penjelasan tentang pola Gateway tanpa proyek Spring Cloud Gateway, lihat artikel kami sebelumnya.

2. Penangan Perutean

Berfokus pada permintaan perutean, Spring Cloud Gateway meneruskan permintaan ke Pemetaan Penangan Gateway - yang menentukan apa yang harus dilakukan dengan permintaan yang cocok dengan rute tertentu.

Mari kita mulai dengan contoh cepat tentang bagaimana Gateway Handler menyelesaikan konfigurasi rute dengan menggunakan RouteLocator:

@Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("r1", r -> r.host("**.baeldung.com") .and() .path("/baeldung") .uri("//baeldung.com")) .route(r -> r.host("**.baeldung.com") .and() .path("/myOtherRouting") .filters(f -> f.prefixPath("/myPrefix")) .uri("//othersite.com") .id("myOtherID")) .build(); }

Perhatikan bagaimana kami memanfaatkan blok bangunan utama dari API ini:

  • Route - API utama dari gateway. Ini ditentukan oleh identifikasi (ID) tertentu, tujuan (URI), dan kumpulan predikat dan filter
  • Predikat - Predikat Java 8 - yang digunakan untuk mencocokkan permintaan HTTP menggunakan header, metode, atau parameter
  • Filter - standar Spring WebFilter

3. Routing Dinamis

Sama seperti Zuul, Spring Cloud Gateway menyediakan sarana untuk merutekan permintaan ke berbagai layanan.

Konfigurasi perutean dapat dibuat dengan menggunakan Java murni ( RouteLocator , seperti yang ditunjukkan pada contoh di bagian 2.1) atau dengan menggunakan konfigurasi properti:

spring: application: name: gateway-service cloud: gateway: routes: - id: baeldung uri: baeldung.com - id: myOtherRouting uri: localhost:9999

4. Pabrik Perutean

Spring Cloud Gateway mencocokkan rute menggunakan infrastruktur Spring WebFlux HandlerMapping .

Ini juga mencakup banyak Pabrik Predikat Rute built-in. Semua predikat ini cocok dengan atribut berbeda dari permintaan HTTP. Beberapa Pabrik Predikat Rute dapat digabungkan melalui logika "dan".

Pencocokan rute dapat diterapkan baik secara terprogram atau melalui file properti konfigurasi menggunakan jenis berbeda dari Pabrik Predikat Rute.

Artikel kami Spring Cloud Gateway Routing Predicate Factories mengeksplorasi pabrik perutean secara lebih detail.

5. Pabrik WebFilter

Filter rute memungkinkan modifikasi permintaan HTTP yang masuk atau respons HTTP keluar.

Spring Cloud Gateway menyertakan banyak Pabrik WebFilter bawaan serta kemungkinan untuk membuat filter khusus.

Artikel kami Spring Cloud Gateway WebFilter Factories mengeksplorasi pabrik WebFilter secara lebih detail.

6. Dukungan Spring Cloud DiscoveryClient

Spring Cloud Gateway dapat dengan mudah diintegrasikan dengan pustaka Service Discovery dan Registry, seperti Eureka Server dan Consul:

@Configuration @EnableDiscoveryClient public class GatewayDiscoveryConfiguration { @Bean public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator(DiscoveryClient discoveryClient) { return new DiscoveryClientRouteDefinitionLocator(discoveryClient); } }

6.1. Filter LoadBalancerClient

The LoadBalancerClientFilter terlihat untuk URI di properti atribut pertukaran menggunakan ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR.

Jika URL memiliki skema lb (misalnya, lb: // baeldung-service) , URL tersebut akan menggunakan Spring Cloud LoadBalancerClient untuk menentukan nama (yaitu, baeldung-service) ke host dan port yang sebenarnya.

URL asli yang tidak diubah ditempatkan di atribut ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR .

7. Pemantauan

Spring Cloud Gateway menggunakan Actuator API, pustaka Spring-Boot terkenal yang menyediakan beberapa layanan out-of-the-box untuk memantau aplikasi.

Setelah Actuator API diinstal dan dikonfigurasi, fitur pemantauan gateway dapat divisualisasikan dengan mengakses / gateway / endpoint.

8. Implementasi

Sekarang kita akan membuat contoh sederhana penggunaan Spring Cloud Gateway sebagai server proxy menggunakan predikat jalur .

8.1. Dependensi

Spring Cloud Gateway saat ini berada dalam repositori pencapaian, pada versi 2.0.0.RC2. Ini juga versi yang kami gunakan di sini.

Untuk menambahkan proyek, kami akan menggunakan sistem manajemen ketergantungan:

   org.springframework.cloud spring-cloud-gateway 2.0.0.RC2 pom import   

Selanjutnya, kami akan menambahkan dependensi yang diperlukan:

 org.springframework.boot spring-boot-actuator   org.springframework.boot spring-boot-starter-webflux   org.springframework.cloud spring-cloud-starter-gateway  

8.2. Penerapan Kode

Dan sekarang kami membuat konfigurasi perutean sederhana di file application.yml :

spring: cloud: gateway: routes: - id: baeldung_route uri: //baeldung.com predicates: - Path=/baeldung/ management: endpoints: web: exposure: include: "*' 

Dan kode aplikasi Gateway:

@SpringBootApplication public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }

Setelah aplikasi dijalankan, kita dapat mengakses url: "// localhost / actuator / gateway / routes / baeldung_route" untuk memeriksa semua konfigurasi perutean yang dibuat:

{ "id":"baeldung_route", "predicates":[{ "name":"Path", "args":{"_genkey_0":"/baeldung"} }], "filters":[], "uri":"//baeldung.com", "order":0 }

Kami melihat bahwa url relatif: "/ baeldung" dikonfigurasi sebagai rute,jadi menekan url "// localhost / baeldung" kita akan dialihkan ke " //baeldung.com ", seperti yang telah dikonfigurasi dalam contoh kita.

9. Kesimpulan

Pada artikel ini, kami menjelajahi beberapa fitur dan komponen yang merupakan bagian dari Spring Cloud Gateway. API baru ini menyediakan alat siap pakai untuk gateway dan dukungan proxy.

Contoh yang disajikan di sini dapat ditemukan di repositori GitHub kami.