Java >> Java Tutorial >  >> Tag >> Spring

So verwenden Sie API Gateway mit Spring Cloud

In diesem Beitrag werde ich zeigen, wie wir das API-Gateway-Muster mit Spring Cloud verwenden können. Da die Microservice-Architektur immer nützlicher wird, ist es ebenso komplex geworden, wie Aufrufe an die Microservices gehandhabt werden.

Der Zweck von Microservices besteht darin, die Anwendung in lose gekoppelte Microservices zu entkoppeln, die problemlos mit Clients und untereinander interagieren können.

Wichtig ist, dass Microservices aufgrund der einfachen Entwicklung und Bereitstellung einfacher auf der Grundlage spezifischer Anforderungen entworfen werden können.

API-Gateway-Entwurfsmuster

Wenn die Unternehmensarchitektur skaliert, wird es mit der Anzahl der Microservices kompliziert. Clients können diese Microservices direkt aufrufen, es gibt jedoch einige Herausforderungen

  1. Jeder Client muss eine Anfrage an die exponierte Microservice-API stellen. In vielen Fällen müssen möglicherweise mehrere Server-Roundtrips durchgeführt werden. Dadurch erhöht sich die Netzwerklatenz.
  2. Jeder Microservice muss gemeinsame Funktionalitäten wie Authentifizierung, Protokollierung und Autorisierung implementieren.
  3. Es wird schwieriger, Microservices zu ändern, ohne den Client zu beeinträchtigen. In Wirklichkeit muss der Client den Microservice und seine Implementierung nicht kennen.

Um diese Probleme zu lösen, enthält die Architektur jetzt eine weitere Ebene zwischen dem Client und den Microservices. Dies ist API Gateway.

API Gateway fungiert wie ein Proxy, der die Anfrage an die entsprechenden Microservices weiterleitet und eine Antwort an den Client zurücksendet. Microservices können über dieses Gateway auch miteinander interagieren.

Verwendung von API Gateway

API Gateway bietet einige Funktionen.

Routing

Die Hauptverwendung von API Gateway besteht darin, die Anfrage vom Client an den entsprechenden Server oder Microservice weiterzuleiten. Insbesondere verbirgt API Gateway die Implementierung der API vor dem Client.

Allgemeine Funktionen

API Gateway kann auch zusätzliche allgemeine Funktionen implementieren und die Belastung durch Microservices im Prozess reduzieren. Zu diesen gemeinsamen Funktionen gehören Protokollierung, Authentifizierung, Autorisierung, Lastenausgleich, Zwischenspeichern von Antworten, Richtlinien für Wiederholungsversuche, Trennschalter und Ratenbegrenzer.

Verschiedene API-Gateways

Es ist eine Reihe von API-Gateways verfügbar, und je nach Bedarf kann jedes davon verwendet werden.

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

Insgesamt hängt das zu verwendende API-Gateway von Ihrem Anwendungsfall ab. Aber die meisten dieser Gateways bieten Skalierungsoptionen, Flexibilität und Support.

In dieser Demo zeige ich, wie man spring-cloud-starter-netflix-zuul verwendet Bibliothek für Netflix API Gateway.

Beispiel für API Gateway mit Spring Cloud

Wir werden jedoch zwei Microservices entwickeln. Wir werden auch ein API-Gateway mit Spring Cloud erstellen. Dieses API-Gateway fungiert als Reverse-Proxy für die Weiterleitung an einen der Microservices.

Lassen Sie uns also den ersten Microservice erstellen. Diese enthält einen CustomerController wie unten:


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

Dieser Microservice wird auf Port 8081 ausgeführt. server.port=8081 .

Lassen Sie uns nun einen weiteren Microservice erstellen. Diese enthält VendorController wie unten:


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

Dieser Microservice wird auf Port 8082 ausgeführt. server.port=8082

API-Gateway mit Spring Cloud

Schließlich erstellen wir ein API-Gateway mit Spring Cloud. Wir müssen die folgenden Abhängigkeiten einschließen:

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'
}

Beachten Sie die Abhängigkeit von spring-cloud-starter-gateway . Trotzdem benötigen wir eine RouteLocator Geben Sie Bean ein, um unsere Anfragen weiterzuleiten. Hier fügen wir die Konfiguration in unserem Api Gateway hinzu.

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

    }
}

Wie oben gezeigt, erstellt diese Konfigurations-Bean einen RouteLocator um Anforderungen zu leiten, die sich auf zwei Module beziehen. Beachten Sie auch, dass unser Gateway-Dienst auf Port 8080 ausgeführt wird. Wenn eine Anfrage mit einer Gateway-Adresse initiiert wird, leitet das API-Gateway sie an den entsprechenden Dienst weiter.

Demo

Beginnen wir mit unseren Microservices und dem API-Gateway-Service. Zwei Microservices werden auf den Ports 8081 und 8082 ausgeführt. Der API-Gateway-Dienst wird auf Port 8080 ausgeführt.

Wenn ich jetzt auf http://localhost:8080/vendor/total zugreife , erhalte ich die Liste der Anbieter wie folgt:

Wenn ich auf http://localhost:8080/customer/total zugreife , erhalte ich die Kundenliste wie folgt:

Schlussfolgerung

Abschließend habe ich gezeigt, wie man API Gateway mit Spring Cloud verwendet. API Gateway ist ein wichtiges Designkonzept. Mit einer zunehmenden Anzahl von Mikrodiensten wird es wichtig, ein gemeinsames Muster zu haben, das einen Großteil der allgemeinen Arbeitslast dieser Dienste bewältigen kann, und API Gateway hilft dabei.

Mein Buch Simplifying Spring Security ist derzeit im Sonderverkauf, falls Sie daran interessiert sind.


Java-Tag