Java >> Java tutorial >  >> Tag >> Spring

Sådan bruger du API Gateway med Spring Cloud

I dette indlæg vil jeg vise, hvordan vi kan bruge API Gateway-mønsteret med Spring Cloud. Med mikroservicearkitektur, der bliver mere og mere nyttig, er det blevet lige så komplekst, hvordan man håndterer opkald til mikrotjenesterne.

Formålet med mikrotjenester er at afkoble applikationen til løst koblede mikrotjenester, der nemt kan interagere med klienter og med hinanden.

Det er vigtigt, at den lette udvikling og implementering gør mikrotjenester nemmere at designe baseret på specifikke behov.

API-gateway-designmønster

Når virksomhedsarkitekturen skaleres, bliver det kompliceret med antallet af mikrotjenester. Kunder kan ringe direkte til disse mikrotjenester, men der er et par udfordringer

  1. Hver klient skal lave en anmodning til den blotlagte mikroservice-API. I mange tilfælde skal den muligvis foretage flere server-rundture. Som et resultat af dette øger det netværksforsinkelsen.
  2. Hver mikrotjeneste skal implementere fælles funktionaliteter som godkendelse, logning og godkendelse.
  3. Det bliver sværere at ændre mikroservice uden at påvirke klienten. I virkeligheden behøver klienten ikke at kende mikroservice og dens implementering bagved.

For at løse disse problemer indeholder arkitekturen nu endnu et lag mellem klienten og mikrotjenesterne. Dette er API Gateway.

API Gateway fungerer som en proxy, der dirigerer anmodningen til de relevante mikrotjenester og returnerer et svar til klienten. Mikrotjenester kan også interagere med hinanden gennem denne gateway.

Brug af API-gateway

Der er nogle få funktioner, som API Gateway tilbyder.

Routing

Den største brug af API Gateway er at dirigere anmodningen fra klienten til den relevante server eller mikrotjeneste. Især API Gateway skjuler implementeringen af ​​API fra klienten.

Fælles funktioner

API Gateway kan også implementere ekstra fælles funktionaliteter og i-processen reducere belastningen fra mikrotjenester. Disse almindelige funktioner omfatter logning, godkendelse, autorisation, belastningsbalancering, svarcache, genforsøgspolitikker, strømafbrydere, hastighedsbegrænser.

Forskellige API-gateways

Der er en række API Gateways tilgængelige, og man kan bruge enhver af disse baseret på behovene.

  • Netflix API Gateway (Zuul)
  • Amazon API Gateway
  • Mulesoft
  • Kong API Gateway
  • Azure API Gateway

Samlet set afhænger hvilken API-gateway, du skal bruge, af din use case. Men de fleste af disse gateways giver muligheder for skalering, fleksibilitet og support.

I denne demo vil jeg vise, hvordan du bruger spring-cloud-starter-netflix-zuul bibliotek til Netflix API Gateway.

Eksempel på API Gateway med Spring Cloud

Vi vil dog udvikle to mikrotjenester. Vi vil også bygge en API-gateway ved hjælp af Spring Cloud. Denne API-gateway vil fungere som en omvendt proxy til at rute til en af ​​mikrotjenesterne.

Så lad os oprette den første mikrotjeneste. Dette vil indeholde en CustomerController som nedenfor:


@RestController
@RequestMapping("/customer")
public class CustomerController
{
    @GetMapping("/total")
    public List customers()
    {
        List list = new ArrayList<>();
        list.add("Microsoft");
        list.add("Amazon");
        list.add("Apple");
        return list;
    }
}

Denne mikrotjeneste vil køre på port 8081. server.port=8081 .

Lad os nu oprette en anden mikrotjeneste. Dette vil indeholde VendorController som nedenfor:


@RestController
@RequestMapping("/vendor")
public class VendorController
{
    @GetMapping("/total")
    public List vendors()
    {
        List list = new ArrayList<>();
        list.add("CJI Consultants");
        list.add("Signature Consultants");
        list.add("Deloitte");
        return list;
    }
}

Denne mikrotjeneste vil køre på port 8082. server.port=8082

API-gateway med Spring Cloud

Vi vil trods alt oprette en API-gateway ved hjælp af Spring Cloud. Vi skal inkludere følgende afhængigheder:

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-webflux'
	implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'io.projectreactor:reactor-test'
}

Bemærk afhængigheden af ​​spring-cloud-starter-gateway . Ikke desto mindre skal vi bruge en RouteLocator skriv bønne for at dirigere vores anmodninger. Det er her, vi tilføjer konfigurationen i vores Api Gateway.

package com.betterjavacode.apigatewaydemo.config;


import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringCloudConfig
{
    @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder routeLocatorBuilder)
    {
        return routeLocatorBuilder.routes()
                .route("customerModule", rt -> rt.path("/customer/**")
                        .uri("http://localhost:8081/"))
                .route("vendorModule", rt -> rt.path("/vendor/**")
                        .uri("http://localhost:8082/"))
                .build();

    }
}

Som vist ovenfor bygger denne konfigurationsbean en RouteLocator at dirigere anmodninger relateret til to moduler. Bemærk også, at vores gateway-tjeneste kører på port 8080. Hvis en anmodning startes med en gateway-adresse, vil API-gatewayen dirigere den til den relevante tjeneste.

Demo

Lad os starte vores mikrotjenester og API Gateway-tjeneste. To mikrotjenester kører på port 8081 og 8082. API-gateway-tjenesten kører på port 8080.

Hvis jeg nu får adgang til http://localhost:8080/vendor/total , vil jeg få listen over leverandører som følger:

Hvis jeg får adgang til http://localhost:8080/customer/total , vil jeg få listen over kunder som følger:

Konklusion

Afslutningsvis viste jeg, hvordan man bruger API Gateway med Spring Cloud. API Gateway er et vigtigt designkoncept. Med et stigende antal mikrotjenester bliver det vigtigt at have et fælles mønster, der kan håndtere meget af den almindelige arbejdsbyrde for disse tjenester, og API Gateway hjælper med det.

Min bog Simplifying Spring Security er i øjeblikket på rabatudsalg, hvis du er interesseret.


Java tag