マイクロサービスアーキテクチャ-ハンズオンMSA

この章では、利用可能なさまざまなサービスを利用する1つのマイクロサービスアプリケーションを構築します。マイクロサービスは、アプリケーションを構築するための費用対効果の高い方法ではないことは誰もが知っています。構築するすべてのサービスは、本質的にフルスタックになるからです。ローカル環境でマイクロサービスを構築するには、ハイエンドのシステム構成が必要になります。サーバーの4つのインスタンスを実行し続けて、ある時点で消費できるようにする必要があるためです。初めてのマイクロサービスを構築するために、利用可能なSOAエンドポイントのいくつかを使用し、アプリケーションで同じものを使用します。

システム構成とセットアップ

ビルドフェーズに進む前に、それに応じてシステムを準備します。いくつかの公開Webサービスが必要になります。あなたはこれを簡単にググることができます。SOAP Webサービスを利用する場合は、1つのWSDLファイルを取得し、そこから特定のWebサービスを利用する必要があります。RESTサービスの場合、同じものを使用するために必要なリンクは1つだけです。この例では、1つのアプリケーションで3つの異なるWebサービス「SOAP」、「REST」、および「custom」を妨害します。

アプリケーションアーキテクチャ

マイクロサービス実装計画を使用してJavaアプリケーションを作成します。カスタムサービスを作成すると、このサービスの出力が他のサービスの入力として機能します。

以下は、マイクロサービスアプリケーションを開発するために従うべき手順です。

Step 1: Client creation for SOAP service−Webサービスを学習するために利用できる無料のWebAPIがたくさんあります。このチュートリアルでは、「」のGeoIPサービスを使用します。http://www.webservicex.net/.”WSDLファイルは、Webサイト「webservicex.net」の次のリンクで提供されています。このWSDLファイルからクライアントを生成するには、ターミナルで次のコマンドを実行するだけです。

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

このコマンドは、サービスエンドポイントインターフェイスにちなんで名付けられた「SEI」という名前の1つのフォルダーの下に必要なすべてのクライアントファイルを生成します。

Step 2: Create your custom web service−このチュートリアルの前の段階で説明したのと同じプロセスに従い、「CustomRest」という名前のMavenベースのRESTAPIを構築します。完了すると、「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";
   }
}

すべてが完了したら、先に進んでこのアプリケーションをサーバーで実行します。ブラウザに次の出力が表示されます。

これはWebサーバーであり、呼び出されると1つの文字列オブジェクトを返します。これは、他のアプリケーションがレコードを生成するために使用できる入力を提供する入力サービスです。

Step 3: Configure another Rest API−このステップでは、services.groupkt.comで利用可能な別のWebサービスを利用します。これにより、呼び出されたときにJSONオブジェクトが返されます。

Step 4: Create JAVA application −次のスクリーンショットに示すように、「新規プロジェクト」->「JAVAプロジェクト」を選択して「完了」をクリックして、通常のJavaアプリケーションを1つ作成します。

Step 5: Add the SOAP client−ステップ1で、SOAPWebサービスのクライアントファイルを作成しました。先に進み、これらのクライアントファイルを現在のプロジェクトに追加します。クライアントファイルが正常に追加されると、アプリケーションディレクトリは次のようになります。

Step 6: Create your main app−これら3つのWebサービスすべてを使用するメインクラスを作成します。ソースプロジェクトを右クリックして、「MicroServiceInAction.java」という名前の新しいクラスを作成します。次のタスクは、これから別のWebサービスを呼び出すことです。

Step 7: Call your custom 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();
}

Step 8: Consume SOAP Services−クライアントファイルを生成しましたが、そのパッケージ全体でどのメソッドを呼び出す必要があるかわかりませんか?このためには、クライアントファイルの生成に使用したWSDLを再度参照する必要があります。すべてのWSDLファイルには、このタグに対して1つの「wsdl:service」タグ検索が必要です。これは、そのWebサービスのエントリポイントである必要があります。以下は、このアプリケーションのサービスエンドポイントです。

次に、このサービスをアプリケーションに実装する必要があります。以下は、SOAPWebサービスを実装するために必要なJavaコードのセットです。

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−これまでに2つのサービスが利用されています。このステップでは、カスタマイズされたURLを持つ別のREST Webサービスが、カスタムWebサービスの助けを借りて使用されます。これを行うには、次の一連のコードを使用します。

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 −「CustomRest」Webサービスが実行されていて、インターネットに接続していることを考えると、すべてが正常に完了した場合は、統合されたメインクラスは次のとおりです。

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

このファイルを実行すると、コンソールに次の出力が表示されます。これで、最初のマイクロサービスアプリケーションの開発に成功しました。