Kiến trúc Microservice - MSA Thực hành

Trong chương này, chúng tôi sẽ xây dựng một ứng dụng microservice sẽ sử dụng các dịch vụ có sẵn khác nhau. Tất cả chúng ta đều biết rằng microservice không phải là cách hiệu quả về chi phí để xây dựng một ứng dụng vì mỗi và mọi dịch vụ mà chúng ta xây dựng sẽ là toàn bộ về bản chất. Việc xây dựng một microservice trong môi trường cục bộ sẽ cần cấu hình hệ thống cao cấp, vì bạn cần có bốn phiên bản của một máy chủ để tiếp tục chạy sao cho nó có thể được sử dụng tại một thời điểm. Để xây dựng dịch vụ vi mô đầu tiên của chúng tôi, chúng tôi sẽ sử dụng một số điểm cuối SOA có sẵn và chúng tôi sẽ sử dụng cùng một trong ứng dụng của mình.

Cấu hình và thiết lập hệ thống

Trước khi tiến xa hơn đến giai đoạn xây dựng, hãy chuẩn bị hệ thống của bạn cho phù hợp. Bạn sẽ cần một số dịch vụ web công cộng. Bạn có thể dễ dàng google cho điều này. Nếu bạn muốn sử dụng dịch vụ web SOAP, thì bạn sẽ nhận được một tệp WSDL và từ đó bạn cần sử dụng dịch vụ web cụ thể. Đối với dịch vụ REST, bạn sẽ chỉ cần một liên kết để sử dụng cùng một. Trong ví dụ này, bạn sẽ kẹt ba dịch vụ web khác nhau “SOAP”, “REST” và “custom” trong một ứng dụng.

Kiến trúc ứng dụng

Bạn sẽ tạo một ứng dụng Java bằng cách sử dụng kế hoạch triển khai microservice. Bạn sẽ tạo một dịch vụ tùy chỉnh và đầu ra của dịch vụ này sẽ hoạt động như một đầu vào cho các dịch vụ khác.

Sau đây là các bước cần làm để phát triển một ứng dụng microservice.

Step 1: Client creation for SOAP service- Có rất nhiều API web miễn phí có sẵn để tìm hiểu một dịch vụ web. Với mục đích của hướng dẫn này, hãy sử dụng dịch vụ GeoIP của “http://www.webservicex.net/.”Tệp WSDL được cung cấp trong liên kết sau trên trang web của họ “ webservicex.net. Để tạo ứng dụng khách từ tệp WSDL này, tất cả những gì bạn cần làm là chạy lệnh sau trong thiết bị đầu cuối của bạn.

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

Lệnh này sẽ tạo tất cả các tệp khách hàng được yêu cầu trong một thư mục có tên “SEI”, được đặt tên theo giao diện điểm cuối dịch vụ.

Step 2: Create your custom web service- Thực hiện theo cùng một quy trình đã đề cập ở giai đoạn trước trong hướng dẫn này và xây dựng một api REST dựa trên Maven có tên là “CustomRest”. Sau khi hoàn tất, bạn sẽ tìm thấy một lớp có tên “MyResource.java”. Hãy tiếp tục và cập nhật lớp này bằng cách sử dụng mã sau.

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

Khi mọi thứ đã hoàn tất, hãy tiếp tục và chạy ứng dụng này trên máy chủ. Bạn sẽ nhận được kết quả sau trong trình duyệt.

Đây là máy chủ web, trả về một đối tượng chuỗi khi nó được gọi. Đây là dịch vụ đầu vào cung cấp đầu vào có thể được sử dụng bởi ứng dụng khác để tạo bản ghi.

Step 3: Configure another Rest API- Trong bước này, sử dụng một dịch vụ web khác có sẵn tại services.groupkt.com. Điều này sẽ trả về một đối tượng JSON khi được gọi.

Step 4: Create JAVA application - Tạo một ứng dụng Java bình thường bằng cách chọn “Dự án mới” -> “Dự án JAVA” và nhấn Kết thúc như thể hiện trong ảnh chụp màn hình sau.

Step 5: Add the SOAP client- Trong bước 1, bạn đã tạo tệp khách hàng cho dịch vụ web SOAP. Hãy tiếp tục và thêm các tệp khách hàng này vào dự án hiện tại của bạn. Sau khi bổ sung thành công các tệp khách hàng, thư mục ứng dụng của bạn sẽ trông như sau.

Step 6: Create your main app- Tạo lớp chính của bạn nơi bạn sẽ sử dụng tất cả ba dịch vụ web này. Nhấp chuột phải vào dự án nguồn và tạo một lớp mới có tên “MicroServiceInAction.java”. Nhiệm vụ tiếp theo là gọi các dịch vụ web khác nhau từ đây.

Step 7: Call your custom web service - Đối với điều này, hãy tiếp tục và thêm bộ mã sau để thực hiện gọi dịch vụ của riêng bạn.

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- Bạn đã tạo tệp khách hàng của mình nhưng bạn không biết phương thức nào nên được gọi trong toàn bộ gói đó? Đối với điều này, bạn cần tham khảo lại WSDL, mà bạn đã sử dụng để tạo tệp khách hàng của mình. Mỗi tệp WSDL phải có một thẻ tìm kiếm “wsdl: service” cho thẻ này. Nó phải là điểm vào của bạn của dịch vụ web đó. Sau đây là điểm cuối dịch vụ của ứng dụng này.

Bây giờ bạn cần triển khai dịch vụ này trong ứng dụng của mình. Sau đây là bộ mã Java bạn cần để triển khai dịch vụ web SOAP của mình.

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- Hai trong số các dịch vụ đã được tiêu thụ cho đến nay. Trong bước này, một dịch vụ web REST khác có URL tùy chỉnh sẽ được sử dụng với sự trợ giúp của dịch vụ web tùy chỉnh của bạn. Sử dụng bộ mã sau để làm như vậy.

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 - Xem xét dịch vụ web “CustomRest” của bạn đang chạy và bạn được kết nối với Internet, nếu mọi thứ được hoàn tất thành công thì sau đây sẽ là lớp chính hợp nhất của bạn.

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

Sau khi chạy tệp này, bạn sẽ thấy kết quả sau trong bảng điều khiển. Bạn đã phát triển thành công ứng dụng microservice đầu tiên của mình.