สถาปัตยกรรมไมโครเซอร์วิส - MSA ภาคปฏิบัติ

ในบทนี้เราจะสร้างแอปพลิเคชั่นไมโครเซอร์วิสหนึ่งตัวที่จะใช้บริการต่างๆที่มีอยู่ เราทุกคนรู้ดีว่า microservice ไม่ใช่วิธีที่คุ้มค่าในการสร้างแอปพลิเคชันเนื่องจากแต่ละบริการที่เราสร้างขึ้นจะเป็นแบบเต็มรูปแบบ การสร้างไมโครเซอร์วิสในสภาพแวดล้อมโลคัลจะต้องมีการกำหนดค่าระบบระดับไฮเอนด์เนื่องจากคุณต้องมีเซิร์ฟเวอร์สี่อินสแตนซ์เพื่อให้ทำงานต่อไปได้เพื่อให้สามารถใช้งานได้ในช่วงเวลาหนึ่ง ในการสร้างไมโครเซอร์วิสครั้งแรกของเราเราจะใช้จุดสิ้นสุด SOA ที่มีอยู่บางส่วนและเราจะใช้สิ่งเดียวกันนี้ในแอปพลิเคชันของเรา

การกำหนดค่าระบบและการตั้งค่า

ก่อนที่จะไปต่อในขั้นตอนการสร้างให้เตรียมระบบของคุณให้สอดคล้องกัน คุณจะต้องมีบริการเว็บสาธารณะ คุณสามารถ google ได้อย่างง่ายดายสำหรับสิ่งนี้ หากคุณต้องการใช้บริการเว็บ SOAP คุณจะได้รับไฟล์ WSDL หนึ่งไฟล์และจากนั้นคุณต้องใช้บริการเว็บเฉพาะ สำหรับบริการ REST คุณจะต้องใช้ลิงค์เดียวเพื่อใช้งานเดียวกัน ในตัวอย่างนี้คุณจะติดขัดบริการเว็บที่แตกต่างกันสามอย่าง "SOAP", "REST" และ "กำหนดเอง" ในแอปพลิเคชันเดียว

สถาปัตยกรรมแอปพลิเคชัน

คุณจะสร้างแอปพลิเคชัน Java โดยใช้แผนการใช้งานไมโครเซอร์วิส คุณจะสร้างบริการที่กำหนดเองและผลลัพธ์ของบริการนี้จะทำงานเป็นอินพุตสำหรับบริการอื่น ๆ

ต่อไปนี้เป็นขั้นตอนในการพัฒนาแอปพลิเคชันไมโครเซอร์วิส

Step 1: Client creation for SOAP service- มีเว็บ API ฟรีมากมายสำหรับเรียนรู้บริการบนเว็บ สำหรับจุดประสงค์ของบทช่วยสอนนี้ให้ใช้บริการ GeoIP ของ“http://www.webservicex.net/.”ไฟล์ WSDL อยู่ในลิงค์ต่อไปนี้บนเว็บไซต์“ webservicex.net ในการสร้างไคลเอนต์จากไฟล์ WSDL นี้สิ่งที่คุณต้องทำคือรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ

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

คำสั่งนี้จะสร้างไฟล์ไคลเอ็นต์ที่จำเป็นทั้งหมดภายใต้โฟลเดอร์เดียวชื่อ“ SEI” ซึ่งตั้งชื่อตามอินเทอร์เฟซจุดสิ้นสุดของบริการ

Step 2: Create your custom web service- ทำตามกระบวนการเดียวกันที่กล่าวถึงในขั้นตอนก่อนหน้าในบทช่วยสอนนี้และสร้าง REST api ที่ใช้ 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";
   }
}

เมื่อทุกอย่างเสร็จสมบูรณ์ให้ดำเนินการต่อและเรียกใช้แอปพลิเคชันนี้บนเซิร์ฟเวอร์ คุณควรได้รับผลลัพธ์ต่อไปนี้ในเบราว์เซอร์

นี่คือเว็บเซิร์ฟเวอร์ที่ส่งคืนอ็อบเจ็กต์สตริงหนึ่งตัวเมื่อถูกเรียกใช้ นี่คือบริการป้อนข้อมูลที่ให้อินพุตที่แอปพลิเคชันอื่นสามารถใช้เพื่อสร้างเรกคอร์ดได้

Step 3: Configure another Rest API- ในขั้นตอนนี้ให้ใช้บริการเว็บอื่นที่services.groupkt.com สิ่งนี้จะส่งคืนออบเจ็กต์ JSON เมื่อเรียกใช้

Step 4: Create JAVA application - สร้างแอปพลิเคชัน Java ปกติโดยเลือก“ New Project” ->“ JAVA project” แล้วกด Finish ตามที่แสดงในภาพหน้าจอต่อไปนี้

Step 5: Add the SOAP client- ในขั้นตอนที่ 1 คุณได้สร้างไฟล์ไคลเอนต์สำหรับบริการเว็บ SOAP ดำเนินการต่อและเพิ่มไฟล์ไคลเอ็นต์เหล่านี้ในโครงการปัจจุบันของคุณ หลังจากเพิ่มไฟล์ไคลเอนต์สำเร็จแล้วไดเรกทอรีแอปพลิเคชันของคุณจะมีลักษณะดังต่อไปนี้

Step 6: Create your main app- สร้างคลาสหลักของคุณที่คุณจะใช้บริการเว็บทั้งสามนี้ คลิกขวาที่โครงการต้นทางและสร้างคลาสใหม่ชื่อ“ MicroServiceInAction.java” ภารกิจต่อไปคือการเรียกใช้บริการเว็บต่างๆจากสิ่งนี้

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 ทุกไฟล์ควรมีแท็ก“ wsdl: service” หนึ่งแท็กค้นหาแท็กนี้ ควรเป็นจุดเริ่มต้นของบริการเว็บนั้น ต่อไปนี้เป็นจุดสิ้นสุดบริการของแอปพลิเคชันนี้

ตอนนี้คุณต้องใช้บริการนี้ในแอปพลิเคชันของคุณ ต่อไปนี้เป็นชุดโค้ด 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());

Step 9: Consume REST web service- บริการสองรายการถูกใช้ไปจนถึงปัจจุบัน ในขั้นตอนนี้บริการเว็บ 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();
}

Step 10: Consume all services - พิจารณาว่าบริการเว็บ“ 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();
      }
   }
}

เมื่อคุณเรียกใช้ไฟล์นี้คุณจะเห็นผลลัพธ์ต่อไปนี้ในคอนโซล คุณได้พัฒนาแอปพลิเคชันไมโครเซอร์วิสแรกของคุณสำเร็จแล้ว