All Products
Search
Document Center

Enterprise Distributed Application Service:Implementasikan registrasi dan penemuan layanan

Last Updated:Mar 12, 2026

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:

  1. Server Nacos lokal yang berjalan dalam mode standalone.

  2. Penyedia layanan yang mendaftar ke Nacos dan mengekspos titik akhir REST.

  3. Konsumen layanan yang menemukan penyedia melalui RestTemplate dan FeignClient.

  4. 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.

Catatan

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

  1. Buka direktori nacos/bin.

  2. Jalankan Nacos Server dalam mode standalone:

    • Linux, UNIX, atau macOS:

      sudo sh startup.sh -m standalone
    • Windows: klik ganda startup.cmd.

  3. Buka http://127.0.0.1:8848/nacos di browser Anda untuk memverifikasi bahwa Nacos Server sedang berjalan. Username dan password default keduanya adalah nacos.

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.properties

Unduh 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:

Klik untuk melihat kode

<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.1.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>

Versi Spring Cloud Alibaba harus sesuai dengan rilis Spring Cloud Anda:

Rilis Spring CloudVersi Spring Cloud Alibaba
Greenwich2.1.1.RELEASE
Finchley2.0.1.RELEASE
Edgware1.5.1.RELEASE
Catatan

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:8848

Ganti 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

  1. Jalankan metode main dari ProviderApplication untuk memulai layanan.

  2. Buka konsol Nacos di http://127.0.0.1:8848/nacos (username/password: nacos/nacos).

  3. Buka Service Management > Services. service-provider muncul 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:

Klik untuk melihat kode

<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.1.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>

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 @FeignClient dan membuat bean proxy.

  • @LoadBalanced — memungkinkan RestTemplate menyelesaikan nama layanan (seperti service-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:8848

Ganti 127.0.0.1 dengan alamat IP Server Nacos jika berjalan di mesin berbeda.

Langkah 6: Verifikasi registrasi

  1. Jalankan metode main dari ConsumerApplication untuk memulai layanan.

  2. Buka konsol Nacos di http://127.0.0.1:8848/nacos.

  3. Buka Service Management > Services. service-consumer muncul dalam daftar layanan bersama service-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-rest

Windows: Buka URL berikut di browser Anda:

  • http://127.0.0.1:18082/echo-rest/rest-rest

  • http://127.0.0.1:18082/echo-feign/feign-rest

Output yang diharapkan:

Titik akhirRespons yang diharapkan
/echo-rest/rest-restrest-rest
/echo-feign/feign-restfeign-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 konfigurasiKunciNilai defaultDeskripsi
Alamat serverspring.cloud.nacos.discovery.server-addrTidak adaAlamat IP dan port Server Nacos
Nama layananspring.cloud.nacos.discovery.service${spring.application.name}Nama yang digunakan untuk mendaftarkan layanan
Nama NICspring.cloud.nacos.discovery.network-interfaceTidak adaAntarmuka jaringan yang alamat IP-nya didaftarkan. Default ke NIC pertama jika tidak ditentukan
Alamat IP terdaftarspring.cloud.nacos.discovery.ipTidak adaMengganti IP yang terdeteksi otomatis. Memiliki prioritas tertinggi
Port terdaftarspring.cloud.nacos.discovery.port-1Terdeteksi otomatis secara default
Namespacespring.cloud.nacos.discovery.namespaceTidak adaMengisolasi layanan di berbagai lingkungan (misalnya, dev, staging, production)
Metadataspring.cloud.nacos.discovery.metadataTidak adaPasangan kunci-nilai kustom yang dilampirkan ke instans layanan. Dikonfigurasi dalam format Map
Klusterspring.cloud.nacos.discovery.cluster-nameDEFAULTNama kluster Nacos
Titik akhirspring.cloud.nacos.discovery.endpointUTF-8Nama domain untuk resolusi alamat server dinamis. Tidak diperlukan saat dideploy ke EDAS
Integrasi Ribbonribbon.nacos.enabledtrueMengaktifkan load balancing berbasis Ribbon dengan Nacos. Ubah hanya bila perlu

Untuk referensi lengkap, lihat Nacos Discovery di GitHub.