Mikro Hizmet Mimarisi - Uygulamalı MSA

Bu bölümde, mevcut farklı hizmetleri tüketecek bir mikro hizmet uygulaması oluşturacağız. Oluşturduğumuz her hizmet doğası gereği tam yığın olacağı için mikro hizmetin bir uygulama oluşturmanın uygun maliyetli bir yolu olmadığını biliyoruz. Yerel ortamda bir mikro hizmet oluşturmak, bir anda tüketilebilecek şekilde çalışmaya devam etmek için bir sunucunun dört örneğine sahip olmanız gerektiğinden, üst düzey sistem yapılandırması gerektirir. İlk mikro hizmetimizi oluşturmak için, mevcut SOA uç noktalarından bazılarını kullanacağız ve aynısını uygulamamızda da kullanacağız.

Sistem Yapılandırması ve Kurulumu

Oluşturma aşamasına geçmeden önce, sisteminizi buna göre hazırlayın. Bazı genel web hizmetlerine ihtiyacınız olacaktır. Bunun için kolayca google'a gidebilirsiniz. SOAP web hizmetini kullanmak istiyorsanız, bir WSDL dosyası alırsınız ve buradan belirli web hizmetini kullanmanız gerekir. REST hizmeti için, aynısını tüketmek için yalnızca bir bağlantıya ihtiyacınız olacaktır. Bu örnekte, tek bir uygulamada üç farklı web servisini "SABUN", "REST" ve "özel" olarak sıkıştıracaksınız.

Uygulama Mimarisi

Mikro hizmet uygulama planını kullanarak bir Java uygulaması oluşturacaksınız. Özel bir hizmet oluşturacaksınız ve bu hizmetin çıktısı diğer hizmetler için bir girdi olarak çalışacaktır.

Aşağıda, bir mikro hizmet uygulaması geliştirmek için izlenecek adımlar verilmiştir.

Step 1: Client creation for SOAP service- Bir web servisini öğrenmek için birçok ücretsiz web API'si vardır. Bu eğiticinin amacı için "GeoIP" hizmetini kullanın.http://www.webservicex.net/.”WSDL dosyası, webservicex.net web sitelerinde aşağıdaki bağlantıda sağlanmaktadır . İstemciyi bu WSDL dosyasından oluşturmak için tek yapmanız gereken terminalinizde aşağıdaki komutu çalıştırmaktır.

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

Bu komut, gerekli tüm istemci dosyalarını, hizmet uç noktası arabiriminden sonra adlandırılan "SEI" adlı bir klasör altında oluşturacaktır.

Step 2: Create your custom web service- Bu eğiticide daha önceki bir aşamada bahsedilen aynı süreci izleyin ve "CustomRest" adlı Maven tabanlı bir REST api oluşturun. Tamamlandığında, "MyResource.java" adlı bir sınıf bulacaksınız. Devam edin ve aşağıdaki kodu kullanarak bu sınıfı güncelleyin.

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

Her şey tamamlandığında, devam edin ve bu uygulamayı sunucuda çalıştırın. Tarayıcıda aşağıdaki çıktıyı almalısınız.

Bu, çağrıldığında bir dize nesnesi döndüren web sunucusudur. Bu, kayıt oluşturmak için diğer uygulamalar tarafından kullanılabilecek girdiler sağlayan girdi hizmetidir.

Step 3: Configure another Rest API- Bu adımda, services.groupkt.com adresinde bulunan başka bir web servisini kullanın . Bu, çağrıldığında bir JSON nesnesi döndürür.

Step 4: Create JAVA application - “Yeni Proje” -> “JAVA projesi” ni seçerek normal bir Java uygulaması oluşturun ve aşağıdaki ekran görüntüsünde gösterildiği gibi Bitir'e basın.

Step 5: Add the SOAP client- 1. adımda, SOAP web hizmeti için istemci dosyasını oluşturdunuz. Devam edin ve bu müşteri dosyalarını mevcut projenize ekleyin. İstemci dosyalarının başarılı bir şekilde eklenmesinden sonra, uygulama dizininiz aşağıdaki gibi görünecektir.

Step 6: Create your main app- Bu üç web hizmetinin tamamını kullanacağınız ana sınıfınızı oluşturun. Kaynak projeye sağ tıklayın ve “MicroServiceInAction.java” adlı yeni bir sınıf oluşturun. Sonraki görev, bundan farklı web servislerini aramaktır.

Step 7: Call your custom web service - Bunun için devam edin ve kendi servisinizi çağırmayı uygulamak için aşağıdaki kod setini ekleyin.

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- İstemci dosyanızı oluşturdunuz ancak bu paketin tamamında hangi yöntemin çağrılması gerektiğini bilmiyor musunuz? Bunun için, istemci dosyalarınızı oluşturmak için kullandığınız WSDL'ye tekrar başvurmanız gerekir. Her WSDL dosyasında bu etiket için bir “wsdl: service” etiket araması bulunmalıdır. Bu web hizmetine giriş noktanız olmalıdır. Bu uygulamanın hizmet uç noktası aşağıdadır.

Şimdi bu hizmeti uygulamanıza uygulamanız gerekiyor. SOAP web hizmetinizi uygulamak için ihtiyacınız olan Java kodu seti aşağıdadır.

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- Şimdiye kadar hizmetlerden ikisi tüketildi. Bu adımda, özelleştirilmiş URL'ye sahip başka bir REST web hizmeti, özel web hizmetinizin yardımıyla kullanılacaktır. Bunu yapmak için aşağıdaki kod setini kullanın.

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 hizmetinizin çalıştığını ve İnternet'e bağlı olduğunuzu düşünürsek, her şey başarıyla tamamlanırsa, aşağıdaki konsolide ana sınıfınız olmalıdır.

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

Bu dosyayı çalıştırdıktan sonra, konsolda aşağıdaki çıktıyı göreceksiniz. İlk mikro hizmet uygulamanızı başarıyla geliştirdiniz.