Architektura mikrousług - praktyczne rozwiązanie MSA

W tym rozdziale zbudujemy jedną aplikację mikrousługową, która będzie korzystać z różnych dostępnych usług. Wszyscy wiemy, że mikrousługi nie są opłacalnym sposobem tworzenia aplikacji, ponieważ każda tworzona przez nas usługa będzie miała charakter pełnego stosu. Zbudowanie mikrousługi w środowisku lokalnym wymagałoby zaawansowanej konfiguracji systemu, ponieważ do dalszego działania serwera potrzebne są cztery wystąpienia, tak aby można go było zużyć w danym momencie. Aby zbudować naszą pierwszą w historii mikrousługę, użyjemy niektórych dostępnych punktów końcowych SOA i będziemy korzystać z tego samego w naszej aplikacji.

Konfiguracja i instalacja systemu

Przed przejściem do etapu budowy odpowiednio przygotuj system. Potrzebujesz publicznych usług internetowych. Możesz łatwo wygooglować to. Jeśli chcesz korzystać z usługi sieciowej SOAP, otrzymasz jeden plik WSDL i stamtąd musisz korzystać z określonej usługi sieciowej. W przypadku usługi REST potrzebujesz tylko jednego łącza, aby korzystać z tego samego. W tym przykładzie zablokujesz trzy różne usługi internetowe „SOAP”, „REST” i „niestandardowe” w jednej aplikacji.

Architektura aplikacji

Stworzysz aplikację Java korzystając z planu implementacji mikrousług. Utworzysz usługę niestandardową, a dane wyjściowe tej usługi będą działać jako dane wejściowe dla innych usług.

Poniżej przedstawiono kroki, które należy wykonać, aby opracować aplikację mikrousług.

Step 1: Client creation for SOAP service- Dostępnych jest wiele bezpłatnych interfejsów API sieci Web do nauki usługi sieciowej. Na potrzeby tego samouczka skorzystaj z usługi GeoIP „http://www.webservicex.net/.”Plik WSDL znajduje się w następującym odsyłaczu w ich witrynie internetowej „ webservicex.net. Aby wygenerować klienta z tego pliku WSDL, wszystko, co musisz zrobić, to uruchomić następujące polecenie w swoim terminalu.

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

To polecenie wygeneruje wszystkie wymagane pliki klienta w jednym folderze o nazwie „SEI”, którego nazwa pochodzi od interfejsu punktu końcowego usługi.

Step 2: Create your custom web service- Wykonaj ten sam proces, o którym wspomniano na wcześniejszym etapie tego samouczka, i utwórz interfejs REST oparty na Maven o nazwie „CustomRest”. Po zakończeniu znajdziesz klasę o nazwie „MyResource.java”. Śmiało i zaktualizuj tę klasę przy użyciu następującego kodu.

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";
   }
}

Gdy wszystko będzie gotowe, uruchom tę aplikację na serwerze. W przeglądarce powinien pojawić się następujący wynik.

To jest serwer WWW, który po wywołaniu zwraca jeden obiekt tekstowy. Jest to usługa wejściowa, która udostępnia dane wejściowe, które mogą być używane przez inną aplikację do generowania rekordów.

Step 3: Configure another Rest API- Na tym etapie skorzystaj z innej usługi internetowej dostępnej pod adresem services.groupkt.com. Po wywołaniu zwróci to obiekt JSON.

Step 4: Create JAVA application - Utwórz jedną normalną aplikację Java, wybierając „Nowy projekt” -> „Projekt JAVA” i naciśnij Zakończ, jak pokazano na poniższym zrzucie ekranu.

Step 5: Add the SOAP client- W kroku 1 utworzono plik klienta dla usługi sieciowej SOAP. Śmiało i dodaj te pliki klienta do bieżącego projektu. Po pomyślnym dodaniu plików klienta katalog aplikacji będzie wyglądał następująco.

Step 6: Create your main app- Utwórz swoją główną klasę, w której będziesz korzystać ze wszystkich tych trzech usług internetowych. Kliknij prawym przyciskiem myszy projekt źródłowy i utwórz nową klasę o nazwie „MicroServiceInAction.java”. Następnym zadaniem jest wywołanie różnych usług internetowych z tego.

Step 7: Call your custom web service - W tym celu dodaj następujący zestaw kodów, aby zaimplementować wywołanie własnej usługi.

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- Wygenerowałeś plik klienta, ale nie wiesz, która metoda powinna zostać wywołana w całym pakiecie? W tym celu musisz ponownie odwołać się do WSDL, którego użyłeś do wygenerowania plików klienta. Każdy plik WSDL powinien mieć jedno wyszukiwanie znacznika „wsdl: service” dla tego znacznika. Powinien to być punkt wejścia do tej usługi internetowej. Poniżej znajduje się punkt końcowy usługi tej aplikacji.

Teraz musisz zaimplementować tę usługę w swojej aplikacji. Poniżej znajduje się zestaw kodu Java potrzebnego do zaimplementowania usługi sieciowej 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- Do tej pory dwie usługi zostały zużyte. W tym kroku inna usługa sieciowa REST ze spersonalizowanym adresem URL zostanie wykorzystana przy pomocy Twojej niestandardowej usługi internetowej. Aby to zrobić, użyj następującego zestawu kodu.

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 - Biorąc pod uwagę, że usługa sieciowa „CustomRest” jest uruchomiona i masz połączenie z Internetem, jeśli wszystko zakończy się pomyślnie, to powinna być skonsolidowana klasa główna.

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

Po uruchomieniu tego pliku w konsoli zobaczysz następujące dane wyjściowe. Udało Ci się stworzyć pierwszą aplikację mikrousługową.