全部产品
Search
文档中心

Serverless App Engine:Gunakan Spring Cloud untuk mengembangkan aplikasi layanan mikro dan menerapkannya ke SAE

更新时间:Dec 04, 2025

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

  • Registri layanan komersial (MSE)

    ZF182Dl2pw

    Untuk informasi tentang cara membuat dan menerapkan registri MSE Nacos, lihat Gunakan registri MSE Nacos.

  • Registri layanan yang dikelola sendiri

    7D79jXUfBL

    Saat membuat dan menerapkan registri Nacos yang dikelola sendiri, perhatikan hal-hal berikut:

    • Pastikan jaringan SAE dan jaringan registri Nacos yang dikelola sendiri saling terhubung.

    • Untuk mencegah perintah menjadi tidak valid, pastikan Anda tidak menggunakan parameter -D dan -XX secara bersamaan. Contoh kode:

      • Kode asli:

        java -Dalicloud.deployment.mode=EDAS_MANAGED -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
      • Kode yang dimodifikasi:

        java -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
    • Jika Anda menggunakan registri layanan yang dikelola sendiri, kami menyarankan Anda menggunakan citra (image) atau paket JAR untuk menerapkan aplikasi, serta mengonfigurasi parameter startup berikut: -Dnacos.use.endpoint.parsing.rule=false dan -Dnacos.use.cloud.namespace.parsing=false.

      Penting

      Untuk menggunakan registri non-bawaan SAE, Anda harus menambahkan parameter startup yang diperlukan sebelum -jar.

      • Jika Anda menggunakan citra untuk menerapkan aplikasi, tambahkan -Dnacos.use.endpoint.parsing.rule=false dan -Dnacos.use.cloud.namespace.parsing=false ke perintah startup file citra. Untuk informasi tentang cara membuat citra Docker, lihat Contoh pembuatan citra.

        Contoh kode sebagai berikut:

        RUN echo 'eval exec java -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
      • Jika Anda menggunakan paket JAR untuk menerapkan aplikasi, buka bagian Startup Command Settings di Konsol SAE. Kemudian, masukkan -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false di bidang options Settings. Gambar berikut menunjukkan perintah startup yang dikonfigurasi untuk menerapkan aplikasi Java di lingkungan runtime Open JDK 8. Untuk informasi selengkapnya, lihat Konfigurasikan perintah startup.sc_configure_a_startup_command_for_nacos

  • Registri layanan bawaan SAE

    x6JeUmPTQf

    SAE menyediakan kemampuan pengalamatan otomatis Nacos Server untuk aplikasi layanan mikro Java. Anda dapat menggunakan fitur service registration and discovery dari SAE untuk mengonfigurasi registri layanan. Untuk informasi selengkapnya, lihat Gunakan registri Nacos bawaan SAE.

Persiapan

  • Unduh Maven dan atur variabel lingkungan.

  • Jalankan Nacos Server.

    1. Unduh dan ekstrak paket Nacos Server.

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

      Catatan

      standalone menunjukkan 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 mengonfigurasi MODE="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.

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

  2. 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:

    Catatan

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

      Catatan

      Spring Cloud Edgware telah mencapai akhir siklus hidupnya. Kami menyarankan agar Anda tidak menggunakan versi ini untuk mengembangkan aplikasi.

  3. Di src/main/java, buat package com.aliware.edas.

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

    Anotasi @EnableDiscoveryClient mengaktifkan 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);
            }
        }             
  5. Di package com.aliware.edas, buat EchoController.

    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;
            }
        }              
  6. Buat file application.properties di path src\main\resources. Di application.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:8848               

    Dalam contoh ini, 127.0.0.1 adalah 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 file application.properties. Untuk informasi selengkapnya, lihat Item konfigurasi.

  7. Verifikasi hasilnya.

    1. Jalankan fungsi main dari ProviderApplication di nacos-service-provider untuk menjalankan aplikasi.

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

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

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

  2. 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>        
  3. Di direktori src/main/java, buat package com.aliware.edas.

  4. Konfigurasikan RestTemplate dan FeignClient di package com.aliware.edas.

    1. Di package com.aliware.edas, buat antarmuka bernama EchoService, 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);
      }                   
    2. Di package com.aliware.edas, buat kelas startup bernama ConsumerApplication dan tambahkan konfigurasi yang diperlukan.

      • Untuk mengaktifkan pendaftaran dan penemuan layanan, gunakan anotasi @EnableDiscoveryClient.

      • Gunakan anotasi @EnableFeignClients untuk 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);
          }
      }
  5. Di package com.aliware.edas, buat kelas 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 path src\main\resources, buat file bernama application.properties. Di file application.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:8848

    Dalam contoh ini, 127.0.0.1 adalah 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 file application.properties. Untuk informasi selengkapnya, lihat Item konfigurasi.

  7. Verifikasi hasilnya.

    1. Jalankan fungsi main dari kelas ConsumerApplication di proyek nacos-service-consumer untuk menjalankan aplikasi.

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

    3. 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-rest
  • Untuk 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

  1. Bind CLB yang menghadap publik ke aplikasi nacos-service-consumer yang diterapkan di SAE. Saat mengonfigurasi akses publik untuk CLB, pilih HTTP untuk Network Protocol, atur HTTP Port ke 80, dan atur Container Port ke 18082. Untuk informasi selengkapnya, lihat Bind CLB ke aplikasi.

  2. Di bilah alamat browser, masukkan alamat IP publik aplikasi dalam format http://<Alamat IP publik>/echo-rest/rest-rest atau http://<Alamat IP publik>/echo-feign/feign-rest lalu 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.