Tüm Ürünler
Search
Belge Merkezi

:RESTful uygulamalar geliştirin (önerilmez)

Son Güncelleme:Oct 06, 2026

HSF çerçevesinde RESTful uygulamalar geliştirin ve hizmet kaydı ile keşfi uygulayın. SAE artık yerel Spring Cloud uygulamalarını desteklediğinden bu geliştirme yöntemi yeni kullanıcılar için önerilmez.

Arka plan bilgileri

Yerel Spring Cloud çerçevesini kullanarak hizmetlerin nasıl geliştirileceğini öğrenmek için bkz. ve Spring Cloud uygulamalarını SAE'de barındırın.

Hizmet kaydı ve keşfi

Bu bölümde, hizmet kaydı ve keşfi özelliklerine sahip yerel bir RESTful uygulamanın nasıl geliştirileceği adım adım açıklanmaktadır.

Demo kaynak kodunu indirin:

  1. Bir hizmet sağlayıcı oluşturun.

    Bu hizmet sağlayıcı basit bir echo hizmeti sunar ve kendini hizmet kayıt defterine kaydeder.

    1. sc-vip-server adlı bir RESTful uygulama projesi oluşturun.

    2. Gerekli bağımlılıkları pom.xml dosyasına ekleyin.

          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.5.8.RELEASE</version>
              <relativePath/>
          </parent>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-vipclient</artifactId>
                  <version>1.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-pandora</artifactId>
                  <version>1.3</version>
              </dependency>
          </dependencies>
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>Dalston.SR4</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>

      Projenin üst öğesini spring-boot-starter-parent olarak ayarlamak istemiyorsanız bir dependencyManagement bölümü ekleyebilir ve bağımlılıkları yönetmek için scope="import" değerini ayarlayabilirsiniz.

      <dependencyManagement>
                  <dependencies>
                      <dependency>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-dependencies</artifactId>
                          <version>1.5.8.RELEASE</version>
                          <type>pom</type>
                          <scope>import</scope>
                      </dependency>
                  </dependencies>
      </dependencyManagement>
    3. Hizmet sağlayıcı uygulamasını oluşturun. Hizmet kaydı ve keşfini etkinleştirmek için @EnableDiscoveryClient ek açıklamasını kullanın.

      @SpringBootApplication
          @EnableDiscoveryClient
          public class ServerApplication {
              public static void main(String[] args) {
                  PandoraBootstrap.run(args);
                  SpringApplication.run(ServerApplication.class, args);
                  PandoraBootstrap.markStartupAndWait();
              }
          }
    4. Basit bir echo hizmeti sağlamak için bir EchoController oluşturun.

      @RestController
          public class EchoController {
              @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
              public String echo(@PathVariable String string) {
                  return string;
              }
          }
    5. resources dizinindeki application.properties dosyasında uygulama adını ve dinleme bağlantı noktasını yapılandırın.

      spring.application.name=service-provider
      server.port=18081
  2. Bir hizmet tüketici oluşturun.

    Bu örnekte hizmet sağlayıcıyı RestTemplate, AsyncRestTemplate ve FeignClient kullanarak çağıran bir hizmet tüketici oluşturulur.

    1. sc-vip-client adlı bir RESTful uygulama projesi oluşturun.

    2. Gerekli bağımlılıkları pom.xml dosyasına ekleyin.

      <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.5.8.RELEASE</version>
              <relativePath/>
          </parent>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-vipclient</artifactId>
                  <version>1.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-pandora</artifactId>
                  <version>1.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-feign</artifactId>
              </dependency>
          </dependencies>
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>Dalston.SR4</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>

      Bu örnekte gösterim amacıyla FeignClient kullanılır. Hizmet sağlayıcıdan (sc-vip-server) farklı olarak tüketicinin pom.xml dosyasında ek bir spring-cloud-starter-feign bağımlılığı bulunur.

    3. RestTemplate, AsyncRestTemplate ve FeignClient kullanmak için sc-vip-server'da yaptığınız gibi hizmet kaydı ve keşfini etkinleştirin ve aşağıdaki iki yapılandırmayı ekleyin.

      • RestTemplate ve AsyncRestTemplate'i hizmet keşfi ile entegre etmek için @LoadBalanced ek açıklamasını ekleyin.

      • FeignClient'i etkinleştirmek için @EnableFeignClients ek açıklamasını ekleyin.

        @SpringBootApplication
            @EnableDiscoveryClient
            @EnableFeignClients
            public class ConsumerApplication {
                @LoadBalanced
                @Bean
                public RestTemplate restTemplate() {
                    return new RestTemplate();
                }
                @LoadBalanced
                @Bean
                public AsyncRestTemplate asyncRestTemplate(){
                    return new AsyncRestTemplate();
                }
                public static void main(String[] args) {
                    PandoraBootstrap.run(args);
                    SpringApplication.run(ConsumerApplication.class, args);
                    PandoraBootstrap.markStartupAndWait();
                }
            }
    4. EchoService için FeignClient'i kullanmadan önce hizmet adını yapılandırın ve yöntemi ilgili HTTP isteğine eşleyin. sc-vip-server projesinde hizmet adı service-provider olarak yapılandırılmıştır.

      @FeignClient(name = "service-provider")
          public interface EchoService {
              @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
              String echo(@PathVariable("str") String str);
          }
    5. Hizmet çağrılarını test etmek için bir Controller oluşturun.

      @RestController
      public class Controller {
         @Autowired
         private RestTemplate restTemplate;
         @Autowired
         private AsyncRestTemplate asyncRestTemplate;
         @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-async-rest/{str}", method = RequestMethod.GET)
         public String asyncRest(@PathVariable String str) throws Exception{
             ListenableFuture<ResponseEntity<String>> future = asyncRestTemplate.
                     getForEntity("http://service-provider/echo/"+str, String.class);
             return future.get().getBody();
         }
         @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
         public String feign(@PathVariable String str) {
             return echoService.echo(str);
         }
      }

      Kod, test amaçlı üç uç nokta uygular:

      • /echo-rest/: RestTemplate kullanılarak hizmet sağlayıcıya yapılan çağrıyı doğrular.

      • /echo-async-rest/: AsyncRestTemplate kullanılarak hizmet sağlayıcıya yapılan çağrıyı doğrular.

      • /echo-feign/: FeignClient kullanılarak hizmet sağlayıcıya yapılan çağrıyı doğrular.

    6. Uygulama adını ve dinleme bağlantı noktasını yapılandırın.

      spring.application.name=service-consumer
      server.port=18082
  3. Yerel ortamda geliştirin ve hata ayıklayın.

    1. Hafif yapılandırma merkezini başlatın.

      Yerel geliştirme ve hata ayıklama işlemleri için hafif yapılandırma merkezini kullanın. Bu merkez

      EDAS

      ve

      SAE

      tarafından kullanılan sunucu tarafı hizmet kaydı ve keşif bileşeninin hafif bir sürümünü sağlar. Daha fazla bilgi için bkz.

      Hafif yapılandırma ve kayıt merkezini başlatın

      .

    2. Uygulamayı başlatın.

      • IDE üzerinden başlatma

        Uygulamayı IDE'nizden başlatmak için -Dvipserver.server.port=8080 VM seçeneğini ekleyin ve ardından ana yöntemi çalıştırın. Not: Bu parametre yalnızca hafif yapılandırma merkezi ile yerel geliştirme yaparken gereklidir. Uygulamayı veya SAE ortamına dağıttığınızda bu parametreyi kaldırmalısınız. Aksi takdirde uygulama hizmetleri yayınlamayabilir veya abone olmayabilir.

        Hafif yapılandırma merkezi ve uygulamanız farklı makinelerde bulunuyorsa ana bilgisayar bağlamalarını yapılandırın. Daha fazla bilgi için bkz. Hafif yapılandırma ve kayıt merkezini başlatın.

      • FatJar üzerinden başlatma

        1. FatJar paketleme eklentisini ekleyin.

          pandora-boot projesini Maven kullanarak FatJar olarak paketlemek için pom.xml dosyanıza aşağıdaki eklentiyi ekleyin. Çakışmaları önlemek için derleme yapılandırmasının <plugins> bölümüne başka FatJar eklentileri eklemeyin.

          <build>
              <plugin>
                  <groupId>com.taobao.pandora</groupId>
                      <artifactId>pandora-boot-maven-plugin</artifactId>
                      <version>2.1.9.1</version>
                      <executions>
                         <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                         </execution>
                       </executions>
              </plugin>
          </build>
        2. Eklentiyi ekledikten sonra projenin kök dizininde mvn clean package komutunu çalıştırın. FatJar dosyası target dizininde oluşturulur.

        3. Uygulamayı bir Java komutu kullanarak başlatın.

          java -Dvipserver.server.port=8080 -Dpandora.location=/Users/{$username}/.m2/repository/com/taobao/pandora/taobao-hsf.sar/dev-SNAPSHOT/taobao-hsf.sar-dev-SNAPSHOT.jar  -jar sc-vip-server-0.0.1-SNAPSHOT.jar
          Not

          -Dpandora.location

          ile belirtilen yol mutlak bir yol olmalı ve

          -jar

          bağımsız değişkeninden önce yerleştirilmelidir.

      Hizmetleri başlatın ve uç noktaları çağırın. Çıktı tüm çağrıların başarılı olduğunu gösterir.

      → ~ curl http://localhost:18082/echo-rest/rest-test
      rest-test%
      → ~ curl http://localhost:18082/echo-async-rest/async-rest-test
      async-rest-test%
      → ~ curl http://localhost:18082/echo-feign/feign-test
      feign-test%
  4. Yaygın sorunları giderin.

    • AsyncRestTemplate hizmet keşfine bağlanamıyor.

      AsyncRestTemplate kullanarak hizmet keşfi desteği Spring Cloud Dalston sürümünde eklenmiştir. Bu sürümü veya daha sonraki bir sürümü kullanmanız gerekir. Daha fazla bilgi için bu pull request adresine bakın.

    • FatJar paketleme eklentisi ile çakışmalar.

      Çakışmaları önlemek için derleme yapılandırmasının <plugins> bölümüne başka FatJar eklentileri eklemeyin.

    • taobao-hsf.sar pakete dahil edilebilir mi?

      Evet ancak bu önerilmez.

      excludeSar

      değerini

      false

      olarak ayarlayarak pandora-boot-maven-plugin yapılandırmasını değiştirebilirsiniz. Bu işlem taobao-hsf.sar dosyasının otomatik olarak pakete dahil edilmesini sağlar.

      <plugin>
          <groupId>com.taobao.pandora</groupId>
          <artifactId>pandora-boot-maven-plugin</artifactId>
          <version>2.1.9.1</version>
          <configuration>
          <excludeSar>false</excludeSar>
          </configuration>
             <executions>
                 <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                  </execution>
          </executions>
      </plugin>

      Bu şekilde Pandora konumunu yapılandırmadan uygulamayı başlatabilirsiniz.

      java -jar  -Dvipserver.server.port=8080 sc-vip-server-0.0.1-SNAPSHOT.jar

      Uygulamayı veya SAE ortamına dağıtmadan önce SAR paketini hariç tutmak için varsayılan yapılandırmayı geri yükleyin.