Meneroka Gerbang Awan Musim Semi Baru

1. Gambaran keseluruhan

Dalam artikel ini, kita akan meneroka ciri utama projek Spring Cloud Gateway, API baru berdasarkan Spring 5, Spring Boot 2 dan Project Reactor.

Alat ini menyediakan mekanisme perutean di luar kotak yang sering digunakan dalam aplikasi perkhidmatan mikro sebagai cara menyembunyikan banyak perkhidmatan di belakang satu fasad.

Untuk penjelasan mengenai corak Gateway tanpa projek Spring Cloud Gateway, lihat artikel kami sebelumnya.

2. Pengendali Laluan

Berfokus pada permintaan routing, Spring Cloud Gateway meneruskan permintaan ke Gateway Handler Mapping - yang menentukan apa yang harus dilakukan dengan permintaan yang sesuai dengan rute tertentu.

Mari kita mulakan dengan contoh ringkas bagaimana Gateway Handler menyelesaikan konfigurasi laluan 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 menggunakan blok bangunan utama API ini:

  • Laluan - API utama gerbang. Ia ditentukan oleh pengenalan (ID) tertentu, destinasi (URI) dan sekumpulan predikat dan saringan
  • Predicate - Predicate Java 8's - yang digunakan untuk memadankan permintaan HTTP menggunakan header, kaedah atau parameter
  • Tapis - WebFilter Spring standard

3. Laluan Dinamik

Sama seperti Zuul, Spring Cloud Gateway menyediakan cara untuk menghantar permintaan ke perkhidmatan yang berbeza.

Konfigurasi routing dapat dibuat dengan menggunakan Java murni ( RouteLocator , seperti yang ditunjukkan dalam 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. Laluan Kilang

Spring Cloud Gateway memadankan laluan menggunakan infrastruktur Spring WebFlux HandlerMapping .

Ia juga merangkumi banyak Kilang Predikat Laluan terbina dalam. Semua predikat ini sesuai dengan atribut yang berbeza dari permintaan HTTP. Kilang Predikat Pelbagai Laluan dapat digabungkan melalui logik “dan”.

Pencocokan laluan dapat diaplikasikan secara berkala atau melalui fail sifat konfigurasi dengan menggunakan jenis Kilang Predikat Laluan yang berbeza.

Artikel kami Spring Cloud Gateway Routing Predicate Factory meneroka kilang penghalaan dengan lebih terperinci.

5. Kilang WebFilter

Penapis laluan memungkinkan pengubahsuaian permintaan HTTP masuk atau respons HTTP keluar mungkin.

Spring Cloud Gateway merangkumi banyak Kilang WebFilter terbina dalam serta kemungkinan membuat penapis tersuai.

Artikel kami Spring Cloud Gateway WebFilter Factories meneroka kilang WebFilter dengan lebih terperinci.

6. Sokongan Spring Cloud DiscoveryClient

Spring Cloud Gateway dapat disatukan dengan mudah dengan perpustakaan 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. Penapis LoadBalancerClient

The LoadBalancerClientFilter kelihatan untuk URI dalam harta pertukaran atribut menggunakan ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR.

Sekiranya URL mempunyai skema lb (misalnya, lb: // baeldung-service) ia akan menggunakan Spring Cloud LoadBalancerClient untuk menyelesaikan nama (iaitu, baeldung-service) ke host dan port sebenar.

URL asal yang tidak diubah suai diletakkan di atribut ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR .

7. Pemantauan

Spring Cloud Gateway menggunakan API Actuator, perpustakaan Spring-Boot terkenal yang menyediakan beberapa perkhidmatan luar untuk memantau aplikasi.

Setelah API Penggerak dipasang dan dikonfigurasi, ciri pemantauan gerbang dapat dilihat dengan mengakses / pintu masuk / titik akhir.

8. Pelaksanaan

Kami sekarang akan membuat contoh mudah penggunaan Spring Cloud Gateway sebagai pelayan proksi menggunakan predikat laluan .

8.1. Kebergantungan

Spring Cloud Gateway kini berada di repositori tonggak, pada versi 2.0.0.RC2. Ini juga versi yang kami gunakan di sini.

Untuk menambahkan projek, kami akan menggunakan sistem pengurusan pergantungan:

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

Seterusnya, kami akan menambahkan kebergantungan yang diperlukan:

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

8.2. Pelaksanaan Kod

Dan sekarang kami membuat konfigurasi penghalaan sederhana dalam fail application.yml :

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

Dan kod aplikasi Gateway:

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

Setelah aplikasi dimulakan, kita dapat mengakses url: "// localhost / actuator / gateway / route / 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 bahawa url relatif: "/ baeldung" dikonfigurasikan sebagai rute,jadi dengan menekan url "// localhost / baeldung" kami akan diarahkan ke " //baeldung.com ", seperti yang dikonfigurasi dalam contoh kami.

9. Kesimpulannya

Dalam artikel ini, kami meneroka beberapa ciri dan komponen yang merupakan sebahagian dari Spring Cloud Gateway. API baru ini menyediakan alat luar untuk sokongan gateway dan proksi.

Contoh yang dikemukakan di sini boleh didapati di repositori GitHub kami.