Topik ini menggunakan aplikasi Spring Cloud yang terdiri atas penyedia layanan (service provider) dan konsumen layanan (service consumer) sebagai contoh untuk menunjukkan cara mengembangkan dan men-debug aplikasi secara lokal, menerapkannya ke SAE, serta mengaktifkan pendaftaran layanan, penemuan layanan, dan panggilan dari konsumen ke penyedia.
Informasi latar belakang
Jika Anda belum familiar dengan Spring Cloud tetapi memiliki pemahaman dasar tentang Spring dan Maven, topik ini akan membantu Anda mempelajari cara menggunakan Spring Cloud Alibaba Nacos Discovery untuk mengimplementasikan pendaftaran dan penemuan layanan pada aplikasi Spring Cloud, serta mengaktifkan panggilan dari konsumen ke penyedia.
Jika Anda sudah familiar dengan komponen pendaftaran layanan di Spring Cloud seperti Eureka, Consul, dan ZooKeeper, tetapi belum pernah menggunakan komponen Nacos Discovery dari Spring Cloud Alibaba, Anda hanya perlu mengganti dependensi dan konfigurasi pendaftaran layanan yang ada dengan dependensi dan konfigurasi Spring Cloud Alibaba Nacos Discovery tanpa perlu memodifikasi kode.
Spring Cloud Alibaba Nacos Discovery mengimplementasikan antarmuka dan spesifikasi standar Spring Cloud Registry, sehingga proses koneksi ke registri layanan menggunakan Spring Cloud tetap hampir tidak berubah.
Jika Anda sudah familiar menggunakan versi open source Spring Cloud Alibaba Nacos Discovery untuk pendaftaran dan penemuan layanan dalam aplikasi Spring Cloud, Anda dapat langsung menerapkan aplikasi tersebut ke SAE untuk memanfaatkan fitur pendaftaran dan penemuan layanan komersial yang disediakan oleh SAE. Untuk informasi selengkapnya, lihat ikhtisar hosting aplikasi.
Mengapa menggunakan registri layanan SAE
Registri layanan SAE menyediakan versi komersial dari Nacos Server open source. Aplikasi yang dikembangkan dengan Spring Cloud Alibaba Nacos Discovery versi open source dapat langsung menggunakan registri layanan komersial yang disediakan oleh SAE.
Registri layanan SAE menawarkan beberapa keunggulan dibandingkan registri yang dikelola sendiri seperti Nacos, Eureka, dan Consul:
Komponen bersama. Anda tidak perlu menerapkan atau memelihara Nacos, Eureka, atau Consul, sehingga mengurangi biaya.
Tautan terenkripsi. Panggilan pendaftaran dan penemuan layanan dienkripsi untuk melindungi layanan Anda agar tidak ditemukan oleh aplikasi yang tidak sah.
Registri layanan SAE terintegrasi secara mulus dengan komponen SAE lainnya, menawarkan solusi layanan mikro komprehensif yang mencakup isolasi lingkungan dan rilis bertahap.
Saat Anda menerapkan aplikasi di SAE, registri layanan SAE secara otomatis mengatur alamat Nacos Server, port layanan, namespace, AccessKey, dan Context-path. Pengaturan ini memiliki prioritas tinggi dan tidak memerlukan konfigurasi tambahan.
Jika Anda memiliki banyak aplikasi layanan mikro, Anda dapat menggunakan salah satu jenis registri layanan berikut yang diurutkan berdasarkan tingkat rekomendasi (dari yang paling direkomendasikan):
Persiapan
Unduh Maven dan atur variabel lingkungan.
Jalankan Nacos Server.
Unduh dan ekstrak paket Nacos Server.
Buka direktori nacos/bin dan jalankan Nacos Server.
Linux, Unix, atau macOS: Jalankan perintah
sudo sh startup.sh -m standalone.Windows: Jalankan perintah
startup.cmd -m standalone.
Catatanstandalonemenunjukkan bahwa file startup.cmd dijalankan dalam mode standalone, bukan mode kluster. Secara default, file startup.cmd dijalankan dalam mode kluster. Jika Anda mengklik ganda file startup.cmd untuk menjalankannya di sistem Windows, startup akan gagal. Dalam kasus ini, Anda harus mengonfigurasiMODE="standalone"di file startup.cmd. Untuk informasi selengkapnya, lihat Quick Start for Nacos.
Langkah 1: Buat penyedia layanan
Buat proyek aplikasi penyedia layanan di lingkungan lokal Anda. Tambahkan dependensi, aktifkan pendaftaran dan penemuan layanan, serta tentukan Nacos Server sebagai registri layanan.
Buat proyek Maven bernama
nacos-service-provider.Tambahkan dependensi ke file
pom.xml.Untuk contoh spesifik, lihat nacos-service-provider. Topik ini menggunakan Spring Boot 2.1.4.RELEASE dan Spring Cloud Greenwich.SR1, dengan dependensi berikut:
CatatanSpring Boot 2.4 ke atas tidak didukung. Spring Cloud Alibaba 2.2.6.RELEASE (versi client 1.4.2) didukung.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </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>Contoh ini menggunakan Spring Cloud Greenwich. Versi Spring Cloud Alibaba yang sesuai adalah 2.1.1.RELEASE.
Jika Anda menggunakan Spring Cloud Finchley, versi Spring Cloud Alibaba yang sesuai adalah 2.0.1.RELEASE.
Jika Anda menggunakan Spring Cloud Edgware, versi Spring Cloud Alibaba yang sesuai adalah 1.5.1.RELEASE.
CatatanSpring Cloud Edgware telah mencapai akhir siklus hidupnya. Kami menyarankan agar Anda tidak menggunakan versi ini untuk mengembangkan aplikasi.
Di
src/main/java, buat packagecom.aliware.edas.Di package
com.aliware.edas, buat kelas startup bernamaProviderApplicationuntuk penyedia layanan dan tambahkan kode berikut.Anotasi
@EnableDiscoveryClientmengaktifkan pendaftaran dan penemuan layanan untuk aplikasi ini.package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }Di package
com.aliware.edas, buatEchoController.Di
EchoController, tentukan pemetaan URL sebagai/echo/{string}, atur metode HTTP ke GET, ambil parameter metode dari path URL, dan kembalikan parameter yang diterima.package com.aliware.edas; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return string; } }Buat file
application.propertiesdi pathsrc\main\resources. Diapplication.properties, tambahkan konfigurasi berikut untuk menentukan alamat Nacos Server.spring.application.name=service-provider server.port=18081 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848Dalam contoh ini,
127.0.0.1adalah alamat Nacos Server. Jika Nacos Server Anda diterapkan di mesin berbeda, Anda harus mengubahnya ke alamat IP yang sesuai. Jika Anda memiliki persyaratan lain, Anda dapat menambahkan konfigurasi ke fileapplication.properties. Untuk informasi selengkapnya, lihat Item konfigurasi.Verifikasi hasilnya.
Jalankan fungsi
maindariProviderApplicationdinacos-service-provideruntuk menjalankan aplikasi.Masuk ke Konsol Nacos Server lokal di
http://127.0.0.1:8848/nacos.Username dan password default untuk konsol Nacos lokal keduanya adalah nacos.
Di panel navigasi sebelah kiri, pilih Service Management > Service List.
Daftar layanan sekarang mencakup
service-provider, dan Anda dapat melihat detail layanan ini dengan mengklik Details.
Langkah 2: Buat konsumen layanan
Bagian ini menjelaskan cara membuat konsumen layanan yang menggunakan Nacos untuk penemuan layanan dan memanggil penyedia menggunakan RestTemplate dan FeignClient.
Buat proyek Maven bernama
nacos-service-consumer.Tambahkan dependensi ke file
pom.xml.Untuk contoh spesifik, lihat nacos-service-consumer.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </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>Di direktori
src/main/java, buat packagecom.aliware.edas.Konfigurasikan RestTemplate dan FeignClient di package
com.aliware.edas.Di package
com.aliware.edas, buat antarmuka bernamaEchoService, tambahkan anotasi@FeignClient, dan konfigurasikan URL HTTP serta metode yang sesuai.package com.aliware.edas; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @FeignClient(name = "service-provider") public interface EchoService { @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) String echo(@PathVariable("str") String str); }Di package
com.aliware.edas, buat kelas startup bernamaConsumerApplicationdan tambahkan konfigurasi yang diperlukan.Untuk mengaktifkan pendaftaran dan penemuan layanan, gunakan anotasi
@EnableDiscoveryClient.Gunakan anotasi
@EnableFeignClientsuntuk mengaktifkan FeignClient.Integrasikan RestTemplate dengan penemuan layanan dengan menambahkan anotasi
@LoadBalanced.
package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
Di package
com.aliware.edas, buat kelasTestControlleruntuk mendemonstrasikan dan memverifikasi fitur penemuan layanan.package com.aliware.edas; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class TestController { @Autowired private RestTemplate restTemplate; @Autowired private EchoService echoService; @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, String.class); } @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) public String feign(@PathVariable String str) { return echoService.echo(str); } }Di path
src\main\resources, buat file bernamaapplication.properties. Di fileapplication.properties, tambahkan konfigurasi berikut untuk menentukan alamat Nacos Server.spring.application.name=service-consumer server.port=18082 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848Dalam contoh ini,
127.0.0.1adalah alamat Nacos Server. Jika Nacos Server Anda diterapkan di mesin berbeda, Anda harus mengubah nilainya ke alamat IP mesin tersebut. Jika Anda memiliki persyaratan lain, Anda dapat menambahkan konfigurasi ke fileapplication.properties. Untuk informasi selengkapnya, lihat Item konfigurasi.Verifikasi hasilnya.
Jalankan fungsi
maindari kelasConsumerApplicationdi proyeknacos-service-consumeruntuk menjalankan aplikasi.Masuk ke Konsol Nacos Server lokal di
http://127.0.0.1:8848/nacos.Username dan password default untuk konsol Nacos lokal keduanya adalah nacos.
Di panel navigasi sebelah kiri, pilih Service Management > Service List. Daftar layanan sekarang mencakup
service-consumer, dan Anda dapat melihat detail layanan ini dengan mengklik Details.
Langkah 3: Pengujian lokal
Uji panggilan layanan dari konsumen ke penyedia di lingkungan lokal.
Untuk Linux, Unix, dan macOS: jalankan perintah berikut.
curl http://127.0.0.1:18082/echo-rest/rest-rest curl http://127.0.0.1:18082/echo-feign/feign-restUntuk Windows: masukkan http://127.0.0.1:18082/echo-rest/rest-rest dan http://127.0.0.1:18082/echo-feign/feign-rest di bilah alamat browser Anda.
Langkah 4: Terapkan aplikasi ke SAE
Setelah menyelesaikan pengembangan dan pengujian lokal aplikasi Anda, Anda dapat memaketkan dan menerapkannya ke SAE.
nacos-service-provider dan nacos-service-consumer diterapkan sebagai dua aplikasi terpisah dan harus diterapkan di wilayah dan namespace yang sama. Untuk informasi selengkapnya, lihat Terapkan aplikasi Java.
Jika Anda menerapkan paket JAR, atur Application Runtime Environment ke Standard Java Application Runtime Environment dalam konfigurasi penerapan aplikasi.
Jika Anda menerapkan paket WAR, atur Application Runtime Environment ke apache-tomcat-XXX dalam konfigurasi penerapan aplikasi.
Saat Anda menerapkan aplikasi ke SAE, registri layanan SAE secara otomatis mengatur informasi alamat Nacos Server, port layanan, namespace, AccessKey, dan Context-path dengan prioritas tinggi. Anda tidak perlu melakukan konfigurasi tambahan. Anda dapat mempertahankan atau menghapus konfigurasi asli.
Langkah 5: Verifikasi hasilnya
Bind CLB yang menghadap publik ke aplikasi
nacos-service-consumeryang diterapkan di SAE. Saat mengonfigurasi akses publik untuk CLB, pilih HTTP untuk Network Protocol, atur HTTP Port ke80, dan atur Container Port ke18082. Untuk informasi selengkapnya, lihat Bind CLB ke aplikasi.Di bilah alamat browser, masukkan alamat IP publik aplikasi dalam format
http://<Alamat IP publik>/echo-rest/rest-restatauhttp://<Alamat IP publik>/echo-feign/feign-restlalu tekan Enter. Jika respons ditampilkan di halaman, aplikasi berhasil diterapkan.
Item konfigurasi
Item konfigurasi | Kunci | Nilai default | Deskripsi |
Alamat server | spring.cloud.nacos.discovery.server-addr | Tidak ada | Alamat IP dan port tempat Nacos Server mendengarkan. |
Nama layanan | spring.cloud.nacos.discovery.service | ${spring.application.name} | Nama layanan saat ini. |
Nama antarmuka jaringan | spring.cloud.nacos.discovery.network-interface | Tidak ada | Jika tidak ada alamat IP yang dikonfigurasi, alamat IP yang sesuai dengan antarmuka jaringan ini akan didaftarkan. Jika nama antarmuka jaringan tidak dikonfigurasi, alamat IP dari antarmuka jaringan pertama digunakan secara default. |
Alamat IP yang didaftarkan | spring.cloud.nacos.discovery.ip | Tidak ada | Prioritas tinggi. |
Port yang didaftarkan | spring.cloud.nacos.discovery.port | -1 | Anda tidak perlu mengonfigurasi parameter ini. Sistem secara otomatis mendeteksi port. |
Namespace | spring.cloud.nacos.discovery.namespace | Tidak ada | Mengisolasi secara logis pendaftaran lingkungan berbeda. Misalnya, sumber daya seperti konfigurasi dan layanan diisolasi antara lingkungan pengembangan dan produksi. |
Metadata | spring.cloud.nacos.discovery.metadata | Tidak ada | Konfigurasikan parameter ini dalam format map. Anda dapat menyesuaikan metadata terkait layanan berdasarkan kebutuhan Anda. |
Kluster | spring.cloud.nacos.discovery.cluster-name | DEFAULT | Nama kluster Nacos. |
Titik akhir | spring.cloud.nacos.discovery.endpoint | Tidak ada | Nama domain layanan di suatu wilayah. Anda dapat memperoleh alamat server secara dinamis melalui nama domain ini. Konfigurasi ini tidak diperlukan saat menerapkan ke SAE. |
Integrasi dengan Ribbon | ribbon.nacos.enabled | true | Jangan ubah nilai ini kecuali diperlukan. |
Untuk informasi selengkapnya tentang Spring Cloud Alibaba Nacos Discovery, lihat Nacos Discovery.



