Tüm Ürünler
Search
Belge Merkezi

Serverless App Engine:Use Spring Cloud to develop microservice applications and deploy them to SAE

Son Güncelleme:Oct 06, 2026

Bu öğreticide, sıfırdan iki Spring Cloud mikroservisi (bir hizmet sağlayıcı ve bir hizmet tüketici) oluşturma, Nacos hizmet kaydı ve keşfi ile yerel olarak test etme ve ardından her ikisini de Serverless App Engine (SAE) üzerine dağıtma adımlarını inceleyeceksiniz.

İşlem sonunda, tüketici üretim ortamında SAE üzerinde çalışırken Nacos aracılığıyla sağlayıcıyı bulacak ve çağıracaktır.

Tam kaynak koduna GitHub üzerinden erişebilirsiniz.

Bu öğretici kimler için?

Başlangıç noktanızı belirleyin ve buradan başlayın:

Durumunuz Nereden başlamalısınız?
Spring Cloud konusunda yeniyseniz Tüm adımları takip edin. Spring Cloud Alibaba Nacos Discovery'nin hizmet kaydı ve keşfini nasıl uyguladığını ve tüketiciden sağlayıcıya çağrıların nasıl etkinleştirildiğini öğreneceksiniz.
Eureka, Consul veya ZooKeeper hakkında bilginiz varsa Mevcut hizmet kayıt defteri bağımlılıklarınızı ve yapılandırmanızı Spring Cloud Alibaba Nacos Discovery ile değiştirin. Kod değişikliği gerekmez; Spring Cloud Alibaba standart Spring Cloud Registry arayüzlerini uygular.
Zaten açık kaynaklı Spring Cloud Alibaba Nacos Discovery kullanıyorsanız Doğrudan 4. Adım: SAE'ye Dağıtım bölümüne geçin.
Yerel Nacos kurulumunu tamamen atlamak istiyorsanız doğrudan 4. Adım: SAE'ye Dağıtım bölümüne gidin ve SAE yerleşik kayıt defterini kullanın. Bu yöntemde yerel bir Nacos Server gerekmez.

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Maven yüklü olmalı ve PATH ortam değişkenine eklenmiş olmalıdır

  • Çalışan bir Nacos Server (1-3. Adımlar için gereklidir; 4. Adıma geçerseniz gerekli değildir)

Yerel bir Nacos Server başlatmak için:

  1. Nacos Server paketini indirin ve çıkarın.

  2. Nacos'u tek başına modda başlatın:

    • Linux, Unix veya macOS: sudo sh startup.sh -m standalone

    • Windows: startup.cmd -m standalone

-m standalone bayrağı, Nacos'u küme modu yerine tek başına modda başlatır. Windows'ta startup.cmd dosyasına çift tıklamak varsayılan olarak küme modunda başlatır; bu durum küme yapılandırması yoksa hata verir. Başlatma hatası alırsanız startup.cmd dosyasını bir metin düzenleyicide açın, MODE="standalone" olarak ayarlayın ve dosyayı yeniden çalıştırın. Daha fazla ayrıntı için Nacos Hızlı Başlangıç konusuna bakın.

Bir hizmet kayıt defteri seçin

SAE, en çok önerilenden en az önerilene doğru sıralanan üç hizmet kayıt defteri seçeneğini destekler:

Seçenek En uygun olduğu durum Notlar
Microservices Engine (MSE) (önerilen) Çok sayıda mikroservis içeren üretim iş yükleri Tam yönetimli ticari Nacos; bkz. MSE Nacos kayıt defteri kullanma
Kendi kendine yönetilen kayıt defteri Tam kontrole ihtiyaç duyan ekipler SAE ile Nacos kümeniz arasında ağ bağlantısı gerekir; aşağıdaki Kendi kendine yönetilen kayıt defteri notları bölümüne bakın
SAE yerleşik kayıt defteri Yeni başlayanlar veya basit iş yükleri Sıfır yapılandırma; SAE, dağıtım sırasında Nacos Server adresini, bağlantı noktasını, ad alanını, AccessKey ve Context-path değerlerini otomatik olarak enjekte eder

ZF182Dl2pw

SAE yerleşik kayıt defteri

SAE, Java mikroservis uygulamaları için otomatik Nacos Server adresleme sağlar. Bunu SAE konsolundaki service registration and discovery özelliği üzerinden yapılandırın. Kurulum talimatları için SAE yerleşik Nacos kayıt defterini kullanma konusuna bakın.

x6JeUmPTQf

Kendi kendine yönetilen kayıt defteri notları

7D79jXUfBL

SAE ile kendi kendine yönetilen bir Nacos kayıt defteri kullanırken, uygulamanızı bir görüntü veya JAR paketi olarak dağıtın ve -jar öncesinde aşağıdaki başlatma parametrelerini ekleyin:

-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false
Önemli

-D ve -XX JVM parametrelerini aynı bağımsız değişkende karıştırmayın; bu durum komutun başarısız olmasına neden olur. Yanlış: Doğru:

java -Dalicloud.deployment.mode=EDAS_MANAGED -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 ... -jar /home/admin/app/xx-server.jar
java -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 ... -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar

Görüntü dağıtımları için: Parametreleri görüntü başlatma komutuna ekleyin:

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

Docker görüntüsü oluşturma rehberi için Görüntü oluşturma örneği konusuna bakın.

JAR paketi dağıtımları için: SAE konsolunda Startup Command Settings bölümüne gidin ve parametreleri options Settings alanına girin.

sc_configure_a_startup_command_for_nacos

Daha fazla ayrıntı için Başlatma komutu yapılandırma konusuna bakın.

1. Adım: Hizmet sağlayıcıyı oluşturun

Hizmet sağlayıcı Nacos'a kaydolur ve bir echo uç noktası sunar. Bu örnekte Spring Boot 2.1.4.RELEASE ve Spring Cloud Greenwich.SR1 kullanılmaktadır.

Spring Boot 2.4 ve sonraki sürümler desteklenmez. Spring Cloud Alibaba 2.2.6.RELEASE kullanıyorsanız gereken istemci sürümü 1.4.2'dir.
  1. nacos-service-provider adında bir Maven projesi oluşturun.

  2. Aşağıdakileri pom.xml dosyasına ekleyin:

    Spring Cloud Edgware kullanım ömrünü tamamlamıştır. Yeni projeler için Greenwich veya sonraki sürümleri kullanın.
    Spring Cloud sürümü Spring Cloud Alibaba sürümü
    Greenwich (bu örnekte kullanılır) 2.1.1.RELEASE
    Finchley 2.0.1.RELEASE
    Edgware (kullanım ömrü doldu) 1.5.1.RELEASE
    <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>

    Sürüm uyumluluğu: Spring Cloud sürümünüzü doğru Spring Cloud Alibaba sürümüyle eşleştirin:

  3. src/main/java dizininde com.aliware.edas paketini oluşturun.

  4. com.aliware.edas paketi içinde ProviderApplication başlatma sınıfını oluşturun. @EnableDiscoveryClient ek açıklaması hizmet kaydı ve keşfini etkinleştirir:

    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. com.aliware.edas paketi içinde EchoController sınıfını oluşturun. Bu sınıf GET isteklerini /echo/{string} yoluna eşler ve yol değişkenini döndürür:

    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. src/main/resources dizininde application.properties dosyasını oluşturun ve yerel Nacos Server'a işaret edin:

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

    Nacos Server'ınız farklı bir ana bilgisayarda çalışıyorsa 127.0.0.1 değerini IP adresiyle değiştirin. Kullanılabilir tüm yapılandırma seçenekleri için Yapılandırma referansı bölümüne bakın.

  7. Kaydı doğrulayın:

    1. main yöntemini ProviderApplication sınıfında çalıştırın.

    2. Tarayıcıda http://127.0.0.1:8848/nacos adresini açın. Varsayılan kullanıcı adı ve parola ikisi de nacos değerindedir.

    3. Sol gezinme bölmesinde Service Management > Service List seçeneklerini seçin. Listede service-provider görünmelidir. Onaylamak için Details seçeneğine tıklayın.

2. Adım: Hizmet tüketiciyi oluşturun

Hizmet tüketici Nacos'a kaydolur ve sağlayıcıyı iki mekanizma kullanarak çağırır: RestTemplate (istemci tarafı yük dengeleme ile) ve FeignClient (bildirim temelli HTTP).

  1. nacos-service-consumer adında bir Maven projesi oluşturun.

  2. Aşağıdakileri pom.xml dosyasına ekleyin. Tüketici, sağlayıcının bağımlılıklarının üzerine spring-cloud-starter-openfeign ekler:

    <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. src/main/java dizininde com.aliware.edas paketini oluşturun.

  4. com.aliware.edas paketi içinde EchoService arayüzünü oluşturun. @FeignClient ek açıklaması bunu Nacos'ta kayıtlı service-provider hizmetine bağlar:

    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);
    }
  5. com.aliware.edas paketi içinde ConsumerApplication başlatma sınıfını oluşturun:

    • @EnableDiscoveryClient — tüketiciyi Nacos'a kaydeder

    • @EnableFeignClients — FeignClient taramasını etkinleştirir

    • @LoadBalanced ek açıklaması RestTemplate bean'inde — Nacos üzerinden istemci tarafı yük dengelemeyi etkinleştirir

    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);
        }
    }
  6. com.aliware.edas paketi içinde iki uç noktayı (her biri farklı bir çağrı yöntemi için) sunan TestController sınıfını oluşturun:

    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;
    
        // Calls the provider via RestTemplate with load balancing
        @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
        public String rest(@PathVariable String str) {
            return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
        }
    
        // Calls the provider via FeignClient
        @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
        public String feign(@PathVariable String str) {
            return echoService.echo(str);
        }
    }
  7. src/main/resources dizininde application.properties dosyasını oluşturun:

    spring.application.name=service-consumer
    server.port=18082
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  8. Kaydı doğrulayın:

    1. main yöntemini ConsumerApplication sınıfında çalıştırın.

    2. http://127.0.0.1:8848/nacos adresini açın (kullanıcı adı ve parola: nacos).

    3. Service Management > Service List seçeneklerini seçin. Listede service-consumer görünümünü onaylayın.

3. Adım: Yerel olarak test edin

Her iki hizmet de çalışırken, tüketici üzerinden sağlayıcıya test istekleri gönderin.

Linux, Unix veya macOS:

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

Windows: Aşağıdaki URL'leri bir tarayıcıya girin:

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

Her iki uç nokta da yanıt gövdesi olarak yol parametresini döndürür; bu durum tüketicinin sağlayıcıyı başarıyla bulduğunu ve çağırdığını doğrular.

4. Adım: SAE'ye dağıtın

nacos-service-provider ve nacos-service-consumer uygulamalarını iki ayrı uygulama olarak dağıtın. Hizmet keşfinin çalışması için her ikisinin de aynı bölge ve ad alanında olması gerekir.

Adım adım dağıtım talimatları için Java uygulaması dağıtma konusuna bakın.

Paket türünüze göre Application runtime environment ayarını yapın:

Paket türü Uygulama çalışma zamanı ortamı
JAR paketi Standard Java Application Runtime Environment
WAR paketi apache-tomcat-XXX

Uygulama SAE üzerinde başladığında, yerleşik hizmet kayıt defteri Nacos Server adresini, hizmet bağlantı noktasını, ad alanını, AccessKey ve Context-path değerlerini otomatik olarak enjekte eder. Bu değerler application.properties dosyasındaki tüm ayarlara göre önceliklidir. Orijinal yapılandırmanız yerinde kalabilir veya kaldırılabilir; her iki yaklaşım da çalışır.

5. Adım: Dağıtımı doğrulayın

  1. nacos-service-consumer uygulamasına genel erişimli bir Klasik Yük Dengeleyici (CLB) bağlayın. Genel erişimi yapılandırırken Network Protocol seçeneğini HTTP, HTTP Port seçeneğini 80 ve Container Port seçeneğini 18082 olarak ayarlayın. Ayrıntılar için Uygulamaya CLB bağlama konusuna bakın.

  2. Bir tarayıcıda CLB'nin genel IP adresini aşağıdaki biçimlerden birinde girin:

    http://<public-IP-address>/echo-rest/rest-rest
    http://<public-IP-address>/echo-feign/feign-rest

    Sayfada dönen bir yanıt, dağıtımın çalıştığını doğrular.

Yapılandırma referansı

application.properties dosyası için Spring Cloud Alibaba Nacos Discovery yapılandırma özellikleri:

Anahtar Varsayılan Açıklama
spring.cloud.nacos.discovery.server-addr Yok Nacos Server'ın IP adresi ve bağlantı noktası
spring.cloud.nacos.discovery.service ${spring.application.name} Hizmetin kaydolduğu ad
spring.cloud.nacos.discovery.network-interface Yok Kayıt için kullanılacak ağ arabirimi; ayarlanmazsa ilk kullanılabilir arabirime geri döner
spring.cloud.nacos.discovery.ip Yok Kaydedilecek açık IP adresi (arabirim algılamasına göre önceliklidir)
spring.cloud.nacos.discovery.port -1 Kaydedilecek bağlantı noktası; belirtilmezse otomatik algılanır
spring.cloud.nacos.discovery.namespace Yok Ortam yalıtımı için ad alanı (örneğin, geliştirmeyi üretimden ayırmak)
spring.cloud.nacos.discovery.metadata Yok Harita biçimindeki özel meta veriler
spring.cloud.nacos.discovery.cluster-name DEFAULT Nacos küme adı
spring.cloud.nacos.discovery.endpoint Yok Dinamik Nacos Server adresi çözümlemesi için alan adı; SAE'ye dağıtım sırasında gerekli değildir
ribbon.nacos.enabled true Ribbon entegrasyonunu Nacos ile etkinleştirir; gerekmedikçe değiştirmeyin

Yapılandırma seçeneklerinin tam listesi için Nacos Discovery konusuna bakın.

Sonraki adımlar