Gerbang layanan mengarahkan permintaan klien yang masuk ke layanan mikro backend berdasarkan aturan yang dapat dikonfigurasi, seperti path URL, header, atau parameter kueri. Topik ini menjelaskan cara membangun gerbang layanan dengan Nacos sebagai registrasi layanan, menggunakan Spring Cloud Gateway atau Spring Cloud Netflix Zuul.
Untuk melewati langkah-langkah penyiapan, unduh proyek demo lengkap berikut:
Cara Spring Cloud Gateway mengarahkan permintaan
Spring Cloud Gateway memproses permintaan melalui tiga konstruk inti:
| Konstruk | Deskripsi |
|---|---|
| Route | Blok dasar pembangun. Setiap route memetakan permintaan yang masuk ke layanan backend, ditentukan oleh ID, URI tujuan, satu atau beberapa predicate, dan filter opsional. |
| Predicate | Kondisi pencocokan yang dievaluasi terhadap permintaan yang masuk (path, header, parameter kueri, dll.). Route dicocokkan ketika semua predicate-nya mengembalikan nilai true. |
| Filter | Langkah pemrosesan yang memodifikasi permintaan atau respons sebelum atau setelah diteruskan. Misalnya, StripPrefix=1 menghapus segmen path pertama sebelum mengirim permintaan ke downstream. |
Alur permintaan: Client → Gateway Handler Mapping (mencocokkan route dengan mengevaluasi predicate) → Gateway Web Handler (menjalankan rantai filter) → Backend Service. Filter dijalankan baik sebelum maupun setelah permintaan yang diproksi, sehingga Anda dapat memodifikasi header, menulis ulang path, atau menambahkan autentikasi di tingkat gerbang.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Maven yang terinstal dengan variabel lingkungan dikonfigurasi
Nacos Server versi terbaru yang telah diunduh
Opsional:
Jalankan Nacos Server
Ekstrak paket Nacos Server yang telah diunduh.
Buka direktori
nacos/bindan jalankan Nacos Server dalam mode standalone:Linux, UNIX, atau macOS:
sh startup.sh -m standaloneWindows: klik ganda
startup.cmd.
Membangun gerbang layanan dengan Spring Cloud Gateway
Spring Cloud Gateway dibangun di atas Project Reactor dan Spring WebFlux, menyediakan gerbang reaktif non-blocking.
Langkah 1: Buat proyek gerbang
Buat proyek Maven bernama
spring-cloud-gateway-nacos.Tambahkan dependensi berikut ke
pom.xml. Contoh ini menggunakan Spring Boot 2.1.4.RELEASE dan Spring Cloud Greenwich.SR1:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>Buat kelas startup
GatewayApplication:@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
Langkah 2: Konfigurasikan aturan routing
Tambahkan konfigurasi berikut ke application.yaml. Ganti 127.0.0.1:8848 dengan alamat aktual Nacos Server Anda jika dijalankan pada mesin yang berbeda.
server:
port: 18012
spring:
application:
name: spring-cloud-gateway-nacos
cloud:
gateway:
routes:
- id: service-provider
uri: lb://service-provider
predicates:
- Path=/provider1/**
filters:
- StripPrefix=1
nacos:
discovery:
server-addr: 127.0.0.1:8848Konfigurasi route ini bekerja sebagai berikut:
| Komponen | Nilai | Deskripsi |
|---|---|---|
| Predicate | Path=/provider1/** | Mencocokkan semua permintaan dengan path yang dimulai dengan /provider1/. |
| URI | lb://service-provider | Meneruskan permintaan yang cocok ke layanan service-provider menggunakan load balancing sisi klien. |
| Filter | StripPrefix=1 | Menghapus segmen path pertama sebelum meneruskan. Misalnya, /provider1/echo/hello menjadi /echo/hello. |
Langkah 3: Jalankan gerbang dan verifikasi pendaftaran
Jalankan fungsi utama
GatewayApplicationuntuk memulai gerbang.Buka konsol Nacos Server di
http://127.0.0.1:8848/nacos(username dan password default:nacos).Pada panel navigasi, pilih Service Management > Services. Pastikan
spring-cloud-gateway-nacosmuncul dalam daftar layanan.
Membangun gerbang layanan dengan Spring Cloud Netflix Zuul
Zuul merupakan opsi gerbang alternatif berbasis model I/O blocking, cocok untuk aplikasi yang sudah menggunakan stack Netflix OSS.
Langkah 1: Buat proyek gerbang
Buat proyek Maven bernama
spring-cloud-zuul-nacos.Tambahkan dependensi berikut ke
pom.xml. Contoh ini menggunakan Spring Boot 2.1.4.RELEASE, Spring Cloud Greenwich.SR1, dan Spring Cloud Alibaba 0.9.0:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>Buat kelas startup
ZuulApplication:@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
Langkah 2: Konfigurasikan aturan routing
Tambahkan konfigurasi berikut ke application.properties. Ganti 127.0.0.1:8848 dengan alamat aktual Nacos Server Anda jika dijalankan pada mesin yang berbeda.
spring.application.name=spring-cloud-zuul-nacos
server.port=18022
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
zuul.routes.opensource-provider1.path=/provider1/**
zuul.routes.opensource-provider1.serviceId=service-providerKonfigurasi ini mengarahkan semua permintaan dengan path yang dimulai dengan /provider1/ ke layanan backend service-provider.
Langkah 3: Jalankan gerbang dan verifikasi pendaftaran
Jalankan fungsi utama
ZuulApplicationuntuk memulai gerbang.Buka konsol Nacos Server di
http://127.0.0.1:8848/nacos(username dan password default:nacos).Pada panel navigasi, pilih Service Management > Services. Pastikan
spring-cloud-zuul-nacosmuncul dalam daftar layanan.
Buat penyedia layanan
Baik Spring Cloud Gateway maupun Zuul memerlukan layanan downstream untuk meneruskan permintaan. Untuk detail lengkap, lihat Implementasikan registrasi dan penemuan layanan.
Contoh berikut membuat penyedia layanan minimal dengan satu titik akhir /echo/{string}:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return string;
}
}
}Verifikasi penerusan permintaan
Verifikasi secara lokal
Jalankan gerbang dan penyedia layanan, lalu kirim permintaan melalui gerbang.
Untuk Spring Cloud Gateway (port 18012):
curl http://127.0.0.1:18012/provider1/echo/helloUntuk Zuul (port 18022):
curl http://127.0.0.1:18022/provider1/echo/helloRespons yang berhasil akan mengembalikan hello, yang mengonfirmasi bahwa gerbang telah meneruskan permintaan ke service-provider dan menghapus awalan /provider1.

Terapkan ke EDAS
Terapkan aplikasi ke Enterprise Distributed Application Service (EDAS). Untuk instruksi penerapan, lihat Implementasikan registrasi dan penemuan layanan.
Registrasi layanan EDAS adalah versi komersial dari Nacos. Saat menerapkan ke EDAS, platform secara otomatis mengonfigurasi detail koneksi Nacos—alamat IP, port layanan, namespace, ID AccessKey, Rahasia AccessKey, dan context path—tanpa memerlukan konfigurasi tambahan. Pertahankan atau hapus pengaturan Nacos on-premises asli sesuai kebutuhan.
Kompatibilitas versi
| Versi Spring Cloud | Versi Spring Cloud Alibaba |
|---|---|
| Greenwich | 2.1.1.RELEASE |
| Finchley | 2.0.1.RELEASE |
| Edgware | 1.5.1.RELEASE |
Spring Cloud Edgware telah mencapai masa akhir dukungan. Jangan gunakan untuk aplikasi baru.