全部产品
Search
文档中心

Enterprise Distributed Application Service:Implementasi pendaftaran layanan dan penemuan layanan

更新时间:Jul 02, 2025

Enterprise Distributed Application Service (EDAS) menyediakan versi ketersediaan umum (GA) dari registri Nacos. Aplikasi yang dikembangkan di Nacos dapat menggunakan registri bersama EDAS tanpa modifikasi kode. Anda hanya perlu menerapkan aplikasi ke EDAS. Topik ini menjelaskan cara mengembangkan sepasang aplikasi mikro layanan contoh Spring Cloud di lingkungan lokal berdasarkan Nacos, mencakup penyedia layanan dan konsumen layanan.

Informasi latar belakang

Aplikasi layanan mikro menggunakan registri untuk mengimplementasikan pendaftaran layanan dan penemuan layanan. Saat mengembangkan aplikasi, Anda dapat memilih registri sesuai dengan kebutuhan aktual Anda.

Anda dapat menggunakan Nacos, yang dijelaskan dalam topik ini, sebagai registri untuk mengimplementasikan pendaftaran layanan dan penemuan layanan untuk aplikasi Anda. Anda juga dapat menggunakan jenis registri lainnya, seperti Eureka, ZooKeeper, dan Consul yang dibuat pengguna atau dikelola di Microservice Engine (MSE). Setelah menerapkan aplikasi ke EDAS, Anda dapat memanfaatkan fitur manajemen aplikasi, tata kelola layanan mikro, dan Platform as a Service (PaaS) berbasis cloud native dari EDAS terlepas dari jenis registri.

  • Untuk informasi lebih lanjut tentang cara menerapkan aplikasi ke EDAS, lihat Ikhtisar dan Ikhtisar.

Anda dapat mengimplementasikan pendaftaran layanan dan penemuan layanan untuk aplikasi Anda berdasarkan instruksi dalam topik ini. Anda juga dapat mengunduh demo aplikasi: penyedia-layanan dan konsumen-layanan.

Persiapan

Sebelum mengembangkan aplikasi, pastikan Anda telah menyelesaikan operasi berikut:

  • Unduh Maven dan atur variabel lingkungan.

  • Unduh versi terbaru dari Nacos Server.

  • Lakukan langkah-langkah berikut untuk memulai Nacos Server:

    1. Dekompres paket Nacos Server yang diunduh.

    2. Masuk ke direktori nacos/bin untuk memulai Nacos Server.

      • Di Linux, UNIX, atau macOS, jalankan perintah sudo sh startup.sh -m standalone.

      • Di Windows, klik dua kali file startup.cmd untuk menjalankannya.

Buat penyedia layanan

Buat proyek aplikasi penyedia di lingkungan lokal, tambahkan dependensi, aktifkan fitur pendaftaran dan penemuan layanan, lalu tentukan Nacos Server sebagai registri.

  1. Buat proyek Maven bernama nacos-service-provider.

  2. Tambahkan dependensi ke file pom.xml.

    Kode berikut memberikan contoh cara menambahkan dependensi. Spring Boot 2.1.4.RELEASE dan Spring Cloud Greenwich.SR1 digunakan dalam contoh ini.

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

    Spring Cloud Greenwich digunakan dalam contoh ini, dan versi Spring Cloud Alibaba adalah 2.1.1.RELEASE.

    • Jika Anda menggunakan Spring Cloud Finchley, versi Spring Cloud Alibaba adalah 2.0.1.RELEASE.

    • Jika Anda menggunakan Spring Cloud Edgware, versi Spring Cloud Alibaba adalah 1.5.1.RELEASE.

      Catatan

      Rilis Spring Cloud Edgware telah mencapai akhir masa layanannya. Oleh karena itu, kami sarankan Anda tidak menggunakan rilis ini untuk mengembangkan aplikasi.

  3. Di src\main\java, buat paket bernama com.aliware.edas.

  4. Di paket com.aliware.edas, buat kelas startup bernama ProviderApplication untuk penyedia layanan, dan tambahkan kode berikut.

    Anotasi @EnableDiscoveryClient menunjukkan bahwa fitur pendaftaran dan penemuan layanan harus diaktifkan untuk aplikasi.

        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);
            }
        }             
  5. Di paket com.aliware.edas, buat EchoController.

    Di EchoController, tentukan /echo/{string} sebagai pemetaan URL dan GET sebagai metode HTTP. Ambil parameter metode dari jalur URL, dan gema 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;
            }
        }              
  6. Di src\main\resources, buat file bernama application.properties dan tambahkan konfigurasi berikut ke application.properties untuk menentukan alamat IP Nacos Server.

        spring.application.name=service-provider
        server.port=18081
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848               

    Dalam konfigurasi sebelumnya, 127.0.0.1 adalah alamat IP Nacos Server. Jika Nacos Server Anda diterapkan di mesin lain, Anda harus mengubah nilainya menjadi alamat IP mesin tersebut. Jika Anda memiliki persyaratan lain, tambahkan item konfigurasi ke file application.properties. Untuk informasi lebih lanjut, lihat Item Konfigurasi untuk Referensi.

  7. Verifikasi hasilnya.

    1. Gunakan fungsi main dari ProviderApplication di nacos-service-provider untuk memulai aplikasi.

    2. Masuk ke konsol Nacos Server lokal di http://127.0.0.1:8848/nacos.

      Nama pengguna dan kata sandi default konsol Nacos Server lokal adalah nacos.

    3. Di panel navigasi sisi kiri, pilih Service Management > Services.

      Anda dapat melihat bahwa service-provider muncul dalam daftar layanan. Anda juga dapat menanyakan informasi detail tentang layanan di Details.

Buat konsumen layanan

Bagian ini menjelaskan fitur pendaftaran layanan dan menjelaskan bagaimana Nacos Server bekerja dengan RestTemplate dan FeignClient.

  1. Buat proyek Maven bernama nacos-service-consumer.

  2. Tambahkan dependensi ke file pom.xml.

    <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>        
  3. Di src\main\java, buat paket bernama com.aliware.edas.

  4. Di paket com.aliware.edas, konfigurasikan RestTemplate dan FeignClient.

    1. Di paket com.aliware.edas, buat kelas antarmuka bernama EchoService, tambahkan anotasi @FeignClient, lalu konfigurasikan URL HTTP dan metode HTTP.

      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);
      }                   
    2. Di paket com.aliware.edas, buat kelas startup bernama ConsumerApplication dan tambahkan konfigurasi terkait.

      • Gunakan anotasi @EnableDiscoveryClient untuk mengaktifkan pendaftaran dan penemuan layanan.

      • Gunakan anotasi @EnableFeignClients untuk mengaktifkan FeignClient.

      • Tambahkan anotasi @LoadBalanced untuk mengintegrasikan RestTemplate dengan penemuan layanan.

      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);
          }
      }
  5. Di paket com.aliware.edas, buat kelas bernama TestController untuk 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);
            }
    
        }           
  6. Di src\main\resources, buat file bernama application.properties dan tambahkan konfigurasi berikut ke application.properties untuk menentukan alamat IP Nacos Server.

        spring.application.name=service-consumer
        server.port=18082
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    Dalam konfigurasi sebelumnya, 127.0.0.1 adalah alamat IP Nacos Server. Jika Nacos Server Anda diterapkan di mesin lain, Anda harus mengubah nilainya menjadi alamat IP mesin tersebut. Jika Anda memiliki persyaratan lain, tambahkan item konfigurasi ke file application.properties. Untuk informasi lebih lanjut, lihat Item Konfigurasi untuk Referensi.

  7. Verifikasi hasilnya.

    1. Jalankan fungsi main dari ConsumerApplication di nacos-service-consumer untuk memulai aplikasi.

    2. Masuk ke konsol Nacos Server lokal di http://127.0.0.1:8848/nacos.

      Nama pengguna dan kata sandi default konsol Nacos Server lokal adalah nacos.

    3. Di panel navigasi sisi kiri, pilih Service Management > Services. Anda dapat melihat bahwa service-consumer muncul dalam daftar layanan. Anda juga dapat menanyakan detail tentang layanan di Detail.

Uji hasilnya di lingkungan lokal

Inisiasi panggilan dari konsumen ke penyedia di lingkungan lokal dan uji hasilnya.

  • Di Linux, UNIX, atau 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-rest
  • Di Windows, masukkan http://127.0.0.1:18082/echo-rest/rest-rest dan http://127.0.0.1:18082/echo-feign/feign-rest di browser.

Apa yang harus dilakukan selanjutnya

Setelah aplikasi dikembangkan, mereka dapat diterapkan ke EDAS. Untuk informasi lebih lanjut, lihat Ikhtisar dan Ikhtisar.

Item konfigurasi untuk referensi

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 Network Interface Controller (NIC)

spring.cloud.nacos.discovery.network-interface

Tidak ada

Jika tidak ada alamat IP yang ditentukan, alamat IP terdaftar adalah alamat IP NIC. Jika item konfigurasi ini tidak ditentukan, alamat IP NIC pertama digunakan secara default.

Alamat IP terdaftar

spring.cloud.nacos.discovery.ip

Tidak ada

Item konfigurasi ini memiliki prioritas tertinggi.

Port terdaftar

spring.cloud.nacos.discovery.port

-1

Tidak diperlukan konfigurasi secara default. Sistem mendeteksi port secara otomatis.

Namespace

spring.cloud.nacos.discovery.namespace

Tidak ada

Namespace banyak digunakan untuk mengisolasi sumber daya di lingkungan yang berbeda. Misalnya, Anda dapat menggunakan namespace untuk mengisolasi sumber daya seperti konfigurasi dan layanan di lingkungan pengembangan, pengujian, dan produksi.

Metadata

spring.cloud.nacos.discovery.metadata

Tidak ada

Item ini harus dikonfigurasikan dalam format Map. Anda dapat menentukan informasi metadata yang terkait dengan layanan sesuai kebutuhan.

Cluster

spring.cloud.nacos.discovery.cluster-name

DEFAULT

Nama kluster Nacos.

Endpoint

spring.cloud.nacos.discovery.endpoint

UTF-8

Nama domain layanan di wilayah tersebut. Anda dapat secara dinamis mengambil alamat server menggunakan nama domain ini. Anda tidak perlu menentukan item konfigurasi ini saat menerapkan layanan ke EDAS.

Aktifkan integrasi Ribbon

ribbon.nacos.enabled

true

Ubah nilai hanya jika diperlukan.

Untuk informasi lebih lanjut tentang Spring Cloud Alibaba Nacos Discovery, lihat versi open source dari Nacos Discovery.