Enterprise Distributed Application Service (EDAS) menyediakan registri Nacos versi General Availability (GA). Aplikasi Spring Cloud yang dibangun dengan Nacos dapat terhubung ke registri bersama ini tanpa perlu memodifikasi kode—cukup deploy ke EDAS, dan platform akan secara otomatis menangani koneksi ke registri.
Tutorial ini memandu Anda dalam membuat dua layanan mikro Spring Cloud—sebuah penyedia layanan (service provider) dan konsumen layanan (service consumer)—yang mendaftar ke Nacos untuk penemuan layanan. Di akhir tutorial, Anda akan memiliki:
Server Nacos lokal yang berjalan dalam mode standalone.
Penyedia layanan yang mendaftar ke Nacos dan mengekspos titik akhir REST.
Konsumen layanan yang menemukan penyedia melalui RestTemplate dan FeignClient.
Verifikasi penemuan layanan end-to-end secara lokal.
Setelah verifikasi lokal selesai, deploy kedua aplikasi ke EDAS. Lihat Deploy aplikasi ke Instance ECS atau Deploy aplikasi ke kluster Kubernetes.
EDAS mendukung beberapa registri, termasuk Nacos, Eureka, ZooKeeper, dan Consul (self-managed atau melalui Microservice Engine (MSE)). Terlepas dari registri yang digunakan, EDAS menyediakan manajemen aplikasi, tata kelola layanan mikro, serta kemampuan PaaS cloud-native setelah deployment.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Menginstal Maven dan mengonfigurasi variabel lingkungan.
Mengunduh dan mengekstrak Nacos Server versi terbaru.
Jalankan Nacos Server
Buka direktori
nacos/bin.Jalankan Nacos Server dalam mode standalone:
Linux, UNIX, atau macOS:
sudo sh startup.sh -m standaloneWindows: klik ganda
startup.cmd.
Buka
http://127.0.0.1:8848/nacosdi browser Anda untuk memverifikasi bahwa Nacos Server sedang berjalan. Username dan password default keduanya adalahnacos.
Struktur proyek
Tutorial ini membuat dua proyek Maven independen:
nacos-service-provider/
├── pom.xml
└── src/main/
├── java/com/aliware/edas/
│ ├── ProviderApplication.java
│ └── EchoController.java
└── resources/
└── application.properties
nacos-service-consumer/
├── pom.xml
└── src/main/
├── java/com/aliware/edas/
│ ├── ConsumerApplication.java
│ ├── EchoService.java
│ └── TestController.java
└── resources/
└── application.propertiesUnduh proyek demo lengkap: service-provider | service-consumer.
Buat penyedia layanan
Langkah 1: Siapkan proyek Maven
Buat proyek Maven bernama nacos-service-provider dan tambahkan dependensi berikut ke pom.xml. Contoh ini menggunakan Spring Boot 2.1.4.RELEASE dan Spring Cloud Greenwich.SR1:
Versi Spring Cloud Alibaba harus sesuai dengan rilis Spring Cloud Anda:
| Rilis 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 akhir masa dukungan. Jangan gunakan Edgware untuk proyek baru.
Langkah 2: Buat kelas aplikasi
Di src/main/java, buat paket com.aliware.edas, lalu tambahkan ProviderApplication.java:
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 // Mengaktifkan pendaftaran dan penemuan layanan
@EnableFeignClients // Mengaktifkan pemindaian FeignClient
public class ConsumerApplication {
@LoadBalanced // Mengintegrasikan RestTemplate dengan penemuan layanan untuk penyeimbangan beban sisi klien
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}Langkah 3: Tambahkan REST controller
Di paket yang sama, buat EchoController.java untuk mengekspos titik akhir /echo/{string}:
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;
}
}Langkah 4: Konfigurasikan alamat registri
Di src/main/resources, buat application.properties:
spring.application.name=service-provider
server.port=18081
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848Ganti 127.0.0.1 dengan alamat IP Server Nacos jika berjalan di mesin berbeda. Untuk opsi konfigurasi tambahan, lihat Referensi konfigurasi.
Langkah 5: Verifikasi registrasi
Jalankan metode
maindariProviderApplicationuntuk memulai layanan.Buka konsol Nacos di
http://127.0.0.1:8848/nacos(username/password:nacos/nacos).Buka Service Management > Services.
service-providermuncul dalam daftar layanan. Klik Details untuk melihat detail registrasi seperti IP dan port instans.
Buat konsumen layanan
Konsumen ini menunjukkan dua pendekatan untuk memanggil penyedia: RestTemplate dengan load balancing sisi klien, dan FeignClient sebagai klien HTTP deklaratif.
Langkah 1: Siapkan proyek Maven
Buat proyek Maven bernama nacos-service-consumer dan tambahkan dependensi berikut ke pom.xml:
Langkah 2: Definisikan antarmuka Feign client
Di src/main/java, buat paket com.aliware.edas, lalu tambahkan EchoService.java:
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") // Merujuk pada nama layanan terdaftar penyedia
public interface EchoService {
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
String echo(@PathVariable("str") String str);
}Langkah 3: Buat kelas aplikasi
Di paket yang sama, buat ConsumerApplication.java:
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 // Mengaktifkan registrasi dan penemuan layanan
@EnableFeignClients // Mengaktifkan pemindaian FeignClient
public class ConsumerApplication {
@LoadBalanced // Mengintegrasikan RestTemplate dengan penemuan layanan untuk load balancing sisi klien
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}Ringkasan anotasi:
@EnableDiscoveryClient— mendaftarkan aplikasi ini ke Nacos.@EnableFeignClients— memindai antarmuka@FeignClientdan membuat bean proxy.@LoadBalanced— memungkinkan RestTemplate menyelesaikan nama layanan (sepertiservice-provider) melalui registri, bukan DNS.
Langkah 4: Tambahkan controller uji
Di paket yang sama, buat TestController.java dengan dua titik akhir yang memanggil penyedia menggunakan pendekatan berbeda:
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;
// Menggunakan RestTemplate dengan penemuan layanan untuk memanggil penyedia
@RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
public String rest(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str,
String.class);
}
// Menggunakan FeignClient untuk memanggil penyedia
@RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
public String feign(@PathVariable String str) {
return echoService.echo(str);
}
}Langkah 5: Konfigurasikan alamat registri
Di src/main/resources, buat application.properties:
spring.application.name=service-consumer
server.port=18082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848Ganti 127.0.0.1 dengan alamat IP Server Nacos jika berjalan di mesin berbeda.
Langkah 6: Verifikasi registrasi
Jalankan metode
maindariConsumerApplicationuntuk memulai layanan.Buka konsol Nacos di
http://127.0.0.1:8848/nacos.Buka Service Management > Services.
service-consumermuncul dalam daftar layanan bersamaservice-provider.
Uji penemuan layanan secara lokal
Dengan kedua aplikasi berjalan, uji penemuan layanan end-to-end. Konsumen menyelesaikan nama layanan service-provider melalui Nacos dan meneruskan setiap permintaan ke penyedia.
Linux, UNIX, atau macOS:
# Uji dengan RestTemplate
curl http://127.0.0.1:18082/echo-rest/rest-rest
# Uji dengan FeignClient
curl http://127.0.0.1:18082/echo-feign/feign-restWindows: Buka URL berikut di browser Anda:
http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest
Output yang diharapkan:
| Titik akhir | Respons yang diharapkan |
|---|---|
/echo-rest/rest-rest | rest-rest |
/echo-feign/feign-rest | feign-rest |
Jika kedua titik akhir mengembalikan nilai parameter path, maka registrasi dan penemuan layanan berfungsi dengan benar.
Deploy ke EDAS
Setelah verifikasi lokal selesai, deploy kedua aplikasi ke EDAS. EDAS menyediakan registri Nacos terkelola, sehingga aplikasi Anda terhubung ke registri tersebut secara otomatis tanpa perlu memodifikasi kode.
Untuk instruksi deployment, lihat:
Referensi konfigurasi
Nacos Discovery mendukung properti konfigurasi berikut dalam application.properties:
| Item konfigurasi | Kunci | Nilai default | Deskripsi |
|---|---|---|---|
| Alamat server | spring.cloud.nacos.discovery.server-addr | Tidak ada | Alamat IP dan port Server Nacos |
| Nama layanan | spring.cloud.nacos.discovery.service | ${spring.application.name} | Nama yang digunakan untuk mendaftarkan layanan |
| Nama NIC | spring.cloud.nacos.discovery.network-interface | Tidak ada | Antarmuka jaringan yang alamat IP-nya didaftarkan. Default ke NIC pertama jika tidak ditentukan |
| Alamat IP terdaftar | spring.cloud.nacos.discovery.ip | Tidak ada | Mengganti IP yang terdeteksi otomatis. Memiliki prioritas tertinggi |
| Port terdaftar | spring.cloud.nacos.discovery.port | -1 | Terdeteksi otomatis secara default |
| Namespace | spring.cloud.nacos.discovery.namespace | Tidak ada | Mengisolasi layanan di berbagai lingkungan (misalnya, dev, staging, production) |
| Metadata | spring.cloud.nacos.discovery.metadata | Tidak ada | Pasangan kunci-nilai kustom yang dilampirkan ke instans layanan. Dikonfigurasi dalam format Map |
| Kluster | spring.cloud.nacos.discovery.cluster-name | DEFAULT | Nama kluster Nacos |
| Titik akhir | spring.cloud.nacos.discovery.endpoint | UTF-8 | Nama domain untuk resolusi alamat server dinamis. Tidak diperlukan saat dideploy ke EDAS |
| Integrasi Ribbon | ribbon.nacos.enabled | true | Mengaktifkan load balancing berbasis Ribbon dengan Nacos. Ubah hanya bila perlu |
Untuk referensi lengkap, lihat Nacos Discovery di GitHub.