Arquitectura de microservicio: práctica MSA

En este capítulo, crearemos una aplicación de microservicio que consumirá diferentes servicios disponibles. Todos sabemos que el microservicio no es una forma rentable de crear una aplicación, ya que todos y cada uno de los servicios que construimos serán de pila completa. La creación de un microservicio en el entorno local necesitaría una configuración de sistema de gama alta, ya que necesita tener cuatro instancias de un servidor para seguir funcionando de modo que pueda consumirse en un momento determinado. Para construir nuestro primer microservicio, usaremos algunos de los puntos finales SOA disponibles y los consumiremos en nuestra aplicación.

Configuración y configuración del sistema

Antes de continuar con la fase de construcción, prepare su sistema en consecuencia. Necesitaría algunos servicios web públicos. Puede buscar fácilmente en Google para esto. Si desea consumir el servicio web SOAP, obtendrá un archivo WSDL y desde allí deberá consumir el servicio web específico. Para el servicio REST, solo necesitará un enlace para consumir el mismo. En este ejemplo, bloqueará tres servicios web diferentes "SOAP", "REST" y "personalizado" en una aplicación.

Arquitectura de aplicación

Creará una aplicación Java utilizando el plan de implementación de microservicios. Creará un servicio personalizado y el resultado de este servicio funcionará como entrada para otros servicios.

A continuación, se muestran los pasos a seguir para desarrollar una aplicación de microservicio.

Step 1: Client creation for SOAP service- Hay muchas API web gratuitas disponibles para aprender un servicio web. A los efectos de este tutorial, utilice el servicio GeoIP de "http://www.webservicex.net/.”El archivo WSDL se proporciona en el siguiente enlace de su sitio web “ webservicex.net. Para generar el cliente a partir de este archivo WSDL, todo lo que necesita hacer es ejecutar el siguiente comando en su terminal.

wsimport http://www.webservicex.net/geoipservice.asmx?WSDL

Este comando generará todos los archivos de cliente requeridos en una carpeta llamada "SEI", que lleva el nombre de la interfaz del punto final del servicio.

Step 2: Create your custom web service- Siga el mismo proceso mencionado en una etapa anterior de este tutorial y cree una API REST basada en Maven llamada "CustomRest". Una vez completado, encontrará una clase llamada "MyResource.java". Continúe y actualice esta clase con el siguiente código.

package com.tutorialspoint.customrest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("myresource")
public class MyResource {
   @GET
   @Produces(MediaType.TEXT_PLAIN)
   
   public String getIt() {
      return "IND|INDIA|27.7.65.215";
   }
}

Una vez que todo esté completo, continúe y ejecute esta aplicación en el servidor. Debería obtener el siguiente resultado en el navegador.

Este es el servidor web, que devuelve un objeto de cadena una vez que se llama. Este es el servicio de entrada que proporciona entradas que pueden ser consumidas por otra aplicación para generar registros.

Step 3: Configure another Rest API- En este paso, consuma otro servicio web disponible en services.groupkt.com. Esto devolverá un objeto JSON cuando se invoca.

Step 4: Create JAVA application - Cree una aplicación Java normal seleccionando "Nuevo proyecto" -> "Proyecto JAVA" y presione Finalizar como se muestra en la siguiente captura de pantalla.

Step 5: Add the SOAP client- En el paso 1, ha creado el archivo de cliente para el servicio web SOAP. Continúe y agregue estos archivos de cliente a su proyecto actual. Después de agregar con éxito los archivos del cliente, el directorio de su aplicación tendrá el siguiente aspecto.

Step 6: Create your main app- Cree su clase principal donde consumirá estos tres servicios web. Haga clic con el botón derecho en el proyecto de origen y cree una nueva clase denominada "MicroServiceInAction.java". La siguiente tarea es llamar a diferentes servicios web desde este.

Step 7: Call your custom web service - Para ello, siga adelante y agregue el siguiente conjunto de códigos para implementar llamando a su propio servicio.

try {
   url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
   conn = (HttpURLConnection) url.openConnection();
   conn.setRequestMethod("GET");
   conn.setRequestProperty("Accept", "application/json");
   
   if (conn.getResponseCode() != 200) {
      throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
   }
   
   BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream())));
   while ((output = br.readLine()) != null) {
      inputToOtherService = output;
   }
   conn.disconnect();

} catch (MalformedURLException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}

Step 8: Consume SOAP Services- ¿Ha generado su archivo de cliente pero no sabe qué método debe llamarse en todo el paquete? Para ello, debe consultar el WSDL nuevamente, que utilizó para generar sus archivos de cliente. Cada archivo WSDL debe tener una búsqueda de etiqueta "wsdl: service" para esta etiqueta. Debería ser su punto de entrada a ese servicio web. A continuación se muestra el punto final de servicio de esta aplicación.

Ahora necesita implementar este servicio en su aplicación. A continuación se muestra el conjunto de código Java que necesita para implementar su servicio web SOAP.

GeoIPService newGeoIPService = new GeoIPService();
GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);  
// Ipaddress is output of our own web service.

System.out.println("Country Name from SOAP Webserivce ---"+newGeoIP.getCountryName());

Step 9: Consume REST web service- Dos de los servicios se han consumido hasta ahora. En este paso, se consumirá otro servicio web REST con URL personalizada con la ayuda de su servicio web personalizado. Utilice el siguiente conjunto de código para hacerlo.

String url1="http://services.groupkt.com/country/get/iso3code/";//customizing the Url
url1 = url1.concat(countryCode);

try {
   URL url = new URL(url1);
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setRequestMethod("GET");
   conn.setRequestProperty("Accept", "application/json");
   
   if (conn.getResponseCode() != 200) {
      throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
   }
   
   BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream())));
   while ((output = br.readLine()) != null) {
      System.out.println(output);
   }
   conn.disconnect();

} catch (MalformedURLException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}

Step 10: Consume all services - Teniendo en cuenta que su servicio web "CustomRest" se está ejecutando y usted está conectado a Internet, si todo se completa correctamente, la siguiente debe ser su clase principal consolidada.

package microserviceinaction;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;

import net.webservicex.GeoIP;
import net.webservicex.GeoIPService;
import net.webservicex.GeoIPServiceSoap;

public class MicroServiceInAction {
   static URL url;
   static HttpURLConnection conn;
   static String output;
   static String inputToOtherService;
   static String countryCode;
   static String ipAddress;
   static String CountryName;
   public static void main(String[] args) {
      //consuming of your own web service
      try {
         url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
         conn = (HttpURLConnection) url.openConnection();
         conn.setRequestMethod("GET");
         conn.setRequestProperty("Accept", "application/json");
         
         if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
         }
         
         BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));
         while ((output = br.readLine()) != null) {
            inputToOtherService = output;
         }
         conn.disconnect();
      
      } catch (MalformedURLException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
      
      //Fetching IP address from the String and other information
      StringTokenizer st = new StringTokenizer(inputToOtherService);
      countryCode = st.nextToken("|");
      CountryName = st.nextToken("|");
      ipAddress = st.nextToken("|");
      
      // Call to SOAP web service with output of your web service--- 
      // getting the location of our given IP address
      String Ipaddress = ipAddress;
      GeoIPService newGeoIPService = new GeoIPService();
      GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
      GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);
      System.out.println("Country Name from SOAP Webservice ---"+newGeoIP.getCountryName());
      
      // Call to REST API --to get all the details of our country
      String url1 = "http://services.groupkt.com/country/get/iso3code/"; //customizing the Url
      url1 = url1.concat(countryCode);
      
      try {
         URL url = new URL(url1);
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         conn.setRequestMethod("GET");
         conn.setRequestProperty("Accept", "application/json");
			
         if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
         }
      
         BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));
         while ((output = br.readLine()) != null) {
            System.out.println(output);
         }
      
         conn.disconnect();
      } catch (MalformedURLException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Una vez que ejecute este archivo, verá el siguiente resultado en la consola. Ha desarrollado con éxito su primera aplicación de microservicio.