Arquitetura de microsserviço - MSA prático
Neste capítulo, construiremos um aplicativo de microsserviço que consumirá diferentes serviços disponíveis. Todos nós sabemos que o microsserviço não é uma forma econômica de construir um aplicativo, pois cada serviço que construímos terá uma pilha completa por natureza. Construir um microsserviço no ambiente local exigiria uma configuração de sistema de alta tecnologia, pois você precisa ter quatro instâncias de um servidor para continuar em execução de forma que possa ser consumido em um determinado momento. Para construir nosso primeiro microsserviço, usaremos alguns dos terminais SOA disponíveis e os consumiremos em nosso aplicativo.
Configuração e instalação do sistema
Antes de prosseguir para a fase de construção, prepare seu sistema adequadamente. Você precisaria de alguns serviços públicos da web. Você pode facilmente google para isso. Se quiser consumir o serviço da web SOAP, você obterá um arquivo WSDL e, a partir daí, precisará consumir o serviço da web específico. Para o serviço REST, você precisará de apenas um link para consumir o mesmo. Neste exemplo, você irá congestionar três serviços da web diferentes “SOAP”, “REST” e “customizado” em um aplicativo.
Arquitetura de Aplicativo
Você criará um aplicativo Java usando um plano de implementação de microsserviço. Você criará um serviço personalizado e a saída desse serviço funcionará como uma entrada para outros serviços.
A seguir estão as etapas a seguir para desenvolver um aplicativo de microsserviço.
Step 1: Client creation for SOAP service- Existem muitas APIs da web gratuitas disponíveis para aprender um serviço da web. Para os fins deste tutorial, use o serviço GeoIP de “http://www.webservicex.net/.”O arquivo WSDL é fornecido no seguinte link em seu site “ webservicex.net. Para gerar o cliente a partir desse arquivo WSDL, tudo o que você precisa fazer é executar o seguinte comando em seu terminal.
wsimport http://www.webservicex.net/geoipservice.asmx?WSDL
Este comando irá gerar todos os arquivos de cliente necessários em uma pasta chamada “SEI”, que tem o nome de interface de terminal de serviço.
Step 2: Create your custom web service- Siga o mesmo processo mencionado em um estágio anterior neste tutorial e crie uma API REST baseada em Maven chamada “CustomRest”. Depois de concluído, você encontrará uma classe chamada “MyResource.java”. Vá em frente e atualize esta classe usando o código a seguir.
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";
}
}
Quando tudo estiver concluído, vá em frente e execute este aplicativo no servidor. Você deve obter a seguinte saída no navegador.
Este é o servidor da web, que retorna um objeto de string assim que é chamado. Este é o serviço de entrada que fornece entradas que podem ser consumidas por outro aplicativo para gerar registros.
Step 3: Configure another Rest API- Nesta etapa, consuma outro serviço da web disponível em services.groupkt.com. Isso retornará um objeto JSON quando chamado.
Step 4: Create JAVA application - Crie um aplicativo Java normal selecionando “Novo Projeto” -> “Projeto JAVA” e clique em Concluir conforme mostrado na imagem a seguir.
Step 5: Add the SOAP client- Na etapa 1, você criou o arquivo do cliente para o serviço da web SOAP. Vá em frente e adicione esses arquivos do cliente ao seu projeto atual. Após a adição bem-sucedida dos arquivos do cliente, o diretório do seu aplicativo terá a seguinte aparência.
Step 6: Create your main app- Crie sua classe principal onde você consumirá todos esses três serviços da web. Clique com o botão direito do mouse no projeto de origem e crie uma nova classe chamada “MicroServiceInAction.java”. A próxima tarefa é chamar diferentes serviços da web a partir deste.
Step 7: Call your custom web service - Para isso, vá em frente e adicione o seguinte conjunto de códigos para implementar a chamada de seu próprio serviço.
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- Você gerou seu arquivo de cliente, mas não sabe qual método deve ser chamado em todo o pacote? Para isso, você precisa consultar o WSDL novamente, que você usou para gerar seus arquivos de cliente. Cada arquivo WSDL deve ter uma pesquisa de tag “wsdl: service” para esta tag. Deve ser o ponto de entrada desse serviço da web. A seguir está o ponto de extremidade de serviço deste aplicativo.
Agora você precisa implementar este serviço em seu aplicativo. A seguir está o conjunto de código Java de que você precisa para implementar seu serviço da web 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- Dois dos serviços foram consumidos até agora. Nesta etapa, outro serviço da web REST com URL customizado será consumido com a ajuda de seu serviço da web customizado. Use o seguinte conjunto de código para fazer isso.
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 - Considerando que o seu serviço web “CustomRest” está em execução e você está conectado à Internet, se tudo for concluído com êxito, a seguir deverá ser sua aula principal consolidada.
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();
}
}
}
Depois de executar esse arquivo, você verá a seguinte saída no console. Você desenvolveu com sucesso seu primeiro aplicativo de microsserviço.