Учебники

Микросервисная архитектура – практический MSA

В этой главе мы создадим одно приложение для микросервиса, которое будет использовать разные доступные сервисы. Мы все знаем, что микросервис не является экономически эффективным способом создания приложения, поскольку каждый создаваемый нами сервис будет иметь полный стек по своей природе. Создание микросервиса в локальной среде потребует высококлассной конфигурации системы, так как вам нужно иметь четыре экземпляра сервера, чтобы он мог работать так, чтобы его можно было использовать в определенный момент времени. Для создания нашего первого микросервиса мы будем использовать некоторые из доступных конечных точек SOA, и мы будем использовать то же самое в нашем приложении.

Конфигурация и настройка системы

Прежде чем перейти к этапу сборки, подготовьте свою систему соответствующим образом. Вам понадобятся некоторые публичные веб-сервисы. Вы можете легко Google для этого. Если вы хотите использовать веб-службу SOAP, вы получите один файл WSDL, а оттуда вам нужно использовать конкретный веб-сервис. Для службы REST вам потребуется только одна ссылка, чтобы потреблять то же самое. В этом примере вы объедините три разных веб-сервиса «SOAP», «REST» и «custom» в одном приложении.

Архитектура приложений

Вы создадите приложение Java с использованием плана реализации микросервиса. Вы создадите пользовательский сервис, и выход этого сервиса будет работать как вход для других сервисов.

Ниже приведены шаги для разработки приложения микросервиса.

Шаг 1. Создание клиента для службы SOAP. Существует множество бесплатных веб-API, доступных для изучения веб-службы. Для целей данного руководства используйте сервис GeoIP по адресу http://www.webservicex.net/. Файл WSDL находится по следующей ссылке на их веб-сайте « webservicex.net. Чтобы сгенерировать клиента из этого файла WSDL, все, что вам нужно сделать, это запустить следующую команду в вашем терминале.

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

Эта команда сгенерирует все необходимые клиентские файлы в одной папке с именем «SEI», которая названа в честь интерфейса конечной точки службы.

Шаг 2. Создайте свой собственный веб-сервис. Выполните ту же процедуру, которая была упомянута на предыдущем этапе в этом руководстве, и создайте API-интерфейс REST на основе Maven с именем «CustomRest». По завершении вы найдете класс с именем «MyResource.java». Идите вперед и обновите этот класс, используя следующий код.

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

Когда все будет готово, запустите это приложение на сервере. Вы должны получить следующий вывод в браузере.

Веб-сервис

Это веб-сервер, который возвращает один строковый объект после его вызова. Это служба ввода, которая предоставляет входные данные, которые могут использоваться другим приложением для создания записей.

Шаг 3. Настройте другой API отдыха. На этом шаге используйте другой веб-сервис, доступный по адресу services.groupkt.com. Это вернет объект JSON при вызове.

Шаг 4. Создание приложения JAVA. Создайте одно обычное приложение Java, выбрав «Новый проект» -> «Проект JAVA» и нажмите «Готово», как показано на следующем снимке экрана.

Приложение JAVA

Шаг 5. Добавление клиента SOAP. На шаге 1 вы создали файл клиента для веб-службы SOAP. Идите дальше и добавьте эти файлы клиента в ваш текущий проект. После успешного добавления файлов клиента каталог вашего приложения будет выглядеть следующим образом.

SOAP веб-сервис

Шаг 6. Создайте главное приложение. Создайте основной класс, в котором вы будете использовать все эти три веб-службы. Щелкните правой кнопкой мыши по исходному проекту и создайте новый класс с именем «MicroServiceInAction.java». Следующая задача – вызвать разные веб-сервисы из этого.

Шаг 7. Позвоните в пользовательский веб-сервис. Для этого добавьте следующий набор кодов, чтобы реализовать вызов собственного сервиса.

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

Шаг 8. Использование служб SOAP. Вы создали клиентский файл, но не знаете, какой метод следует вызывать во всем пакете? Для этого вам нужно снова обратиться к WSDL, который вы использовали для генерации ваших клиентских файлов. Каждый файл WSDL должен иметь один тег «wsdl: service» для поиска этого тега. Это должна быть ваша точка входа в этот веб-сервис. Ниже приводится конечная точка службы этого приложения.

WSDL Сервис

Теперь вам нужно внедрить этот сервис в ваше приложение. Ниже приведен набор кода Java, который необходим для реализации веб-службы 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());

Шаг 9. Использование веб-службы REST. Две из этих служб использовались до сих пор. На этом шаге другой веб-сервис REST с настроенным URL-адресом будет использоваться с помощью вашего пользовательского веб-сервиса. Используйте следующий набор кода для этого.

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

Шаг 10. Использование всех сервисов. Учитывая, что ваш веб-сервис «CustomRest» запущен и вы подключены к Интернету, если все выполнено успешно, то следующим должен быть ваш консолидированный основной класс.

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

Запустив этот файл, вы увидите следующий вывод в консоли. Вы успешно разработали свое первое микросервисное приложение.