Todos los productos
Search
Centro de documentos

:Desarrollo de aplicaciones RESTful (no recomendado)

Última actualización: Sep 05, 2026

Desarrolle aplicaciones RESTful en el framework HSF e implemente el registro y descubrimiento de servicios. Dado que SAE ahora admite aplicaciones nativas de Spring Cloud, este método de desarrollo no se recomienda para nuevos usuarios.

Contexto

Para aprender a desarrollar servicios con el framework nativo de Spring Cloud, consulte y Host Spring Cloud applications in SAE.

Registro y descubrimiento de servicios

Esta sección le guía en el desarrollo de una aplicación RESTful local con registro y descubrimiento de servicios.

Descargue el código fuente de la demostración:

  1. Cree un proveedor de servicios.

    Este proveedor de servicios expone un servicio echo simple y se registra en el registro de servicios.

    1. Cree un proyecto de aplicación RESTful llamado sc-vip-server.

    2. Agregue las dependencias obligatorias al archivo pom.xml.

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

      Si no desea establecer el padre del proyecto como spring-boot-starter-parent, puede agregar una sección dependencyManagement y configurar scope="import" para gestionar las dependencias.

      <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. Cree la aplicación proveedora de servicios. Utilice la anotación @EnableDiscoveryClient para habilitar el registro y descubrimiento de servicios.

      @SpringBootApplication
          @EnableDiscoveryClient
          public class ServerApplication {
              public static void main(String[] args) {
                  PandoraBootstrap.run(args);
                  SpringApplication.run(ServerApplication.class, args);
                  PandoraBootstrap.markStartupAndWait();
              }
          }
    4. Cree un EchoController para proporcionar un servicio echo simple.

      @RestController
          public class EchoController {
              @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
              public String echo(@PathVariable String string) {
                  return string;
              }
          }
    5. En el archivo application.properties ubicado en el directorio resources, configure el nombre de la aplicación y el puerto de escucha.

      spring.application.name=service-provider
      server.port=18081
  2. Cree un consumidor de servicios.

    Este ejemplo crea un consumidor de servicios que invoca al proveedor mediante RestTemplate, AsyncRestTemplate y FeignClient.

    1. Cree un proyecto de aplicación RESTful llamado sc-vip-client.

    2. Agregue las dependencias obligatorias al archivo pom.xml.

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

      Este ejemplo utiliza FeignClient para la demostración. A diferencia del proveedor de servicios (sc-vip-server), el archivo pom.xml del consumidor incluye una dependencia adicional de spring-cloud-starter-feign.

    3. Para usar RestTemplate, AsyncRestTemplate y FeignClient, también debe habilitar el registro y descubrimiento de servicios (como hizo para sc-vip-server) y agregar las siguientes dos configuraciones.

      • Agregue la anotación @LoadBalanced para integrar RestTemplate y AsyncRestTemplate con el descubrimiento de servicios.

      • Agregue la anotación @EnableFeignClients para activar FeignClient.

        @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. Antes de utilizar FeignClient para EchoService, debe configurar el nombre del servicio y asignar el método a la solicitud HTTP correspondiente. En el proyecto sc-vip-server, el nombre del servicio se configura como service-provider.

      @FeignClient(name = "service-provider")
          public interface EchoService {
              @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
              String echo(@PathVariable("str") String str);
          }
    5. Cree un Controller para probar las llamadas al servicio.

      @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);
         }
      }

      El código implementa tres endpoints para pruebas:

      • /echo-rest/: Verifica la llamada al proveedor de servicios mediante RestTemplate.

      • /echo-async-rest/: Verifica la llamada al proveedor de servicios mediante AsyncRestTemplate.

      • /echo-feign/: Verifica la llamada al proveedor de servicios mediante FeignClient.

    6. Configure el nombre de la aplicación y el puerto de escucha.

      spring.application.name=service-consumer
      server.port=18082
  3. Desarrolle y depure localmente.

    1. Inicie el centro de configuración ligero.

      Para el desarrollo y la depuración locales, utilice el centro de configuración ligero. Este proporciona una versión ligera del componente de registro y descubrimiento de servicios del lado del servidor que utilizan

      EDAS

      y

      SAE

      . Para obtener más información, consulte

      Start the lightweight configuration and registration center

      .

    2. Inicie la aplicación.

      • Inicio desde un IDE

        Para iniciar la aplicación desde su IDE, agregue la opción de VM -Dvipserver.server.port=8080 y luego ejecute el método main. Nota: Este parámetro es obligatorio solo para el desarrollo local con el centro de configuración ligero. Debe eliminar este parámetro cuando despliegue la aplicación en o SAE. De lo contrario, la aplicación podría fallar al publicar o suscribirse a servicios.

        Si el centro de configuración ligero y su aplicación están en máquinas diferentes, configure los enlaces de host. Para obtener más información, consulte Start the lightweight configuration and registration center.

      • Inicio desde un FatJar

        1. Agregue el plugin de empaquetado FatJar.

          Para empaquetar el proyecto pandora-boot en un FatJar mediante Maven, agregue el siguiente plugin a su archivo pom.xml. Para evitar conflictos, no agregue otros plugins de FatJar a la sección <plugins> de la configuración de compilación.

          <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. Después de agregar el plugin, ejecute el comando mvn clean package en el directorio raíz del proyecto. El archivo FatJar se genera en el directorio target.

        3. Inicie la aplicación mediante un comando de Java.

          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
          Nota

          La ruta especificada por

          -Dpandora.location

          debe ser una ruta absoluta y debe colocarse antes del argumento

          -jar

          .

      Inicie los servicios y llame a los endpoints. La salida muestra que todas las llamadas son exitosas.

      → ~ 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. Resuelva problemas comunes.

    • AsyncRestTemplate no puede conectarse al descubrimiento de servicios.

      La compatibilidad con el descubrimiento de servicios mediante AsyncRestTemplate se agregó en Spring Cloud Dalston. Debe utilizar esta versión o una posterior. Para obtener más información, consulte esta solicitud de extracción.

    • Conflictos con el plugin de empaquetado FatJar.

      Para evitar conflictos, no agregue otros plugins de FatJar a la sección <plugins> de la configuración de compilación.

    • ¿Puedo incluir taobao-hsf.sar en el paquete?

      Sí, pero no se recomienda.

      Puede modificar la configuración de pandora-boot-maven-plugin estableciendo

      excludeSar

      en

      false

      . Esto incluye automáticamente taobao-hsf.sar en el paquete.

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

      De esta manera, puede iniciar la aplicación sin configurar la ubicación de Pandora.

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

      Antes de desplegar la aplicación en o SAE, restaure la configuración predeterminada para excluir el paquete SAR.