Eine Einführung in Spring Cloud Zookeeper

Eine Einführung in Spring Cloud Zookeeper

1. Einführung

In diesem Artikel lernen wir Zookeeper kennen und wie es für Service Discovery verwendet wird, das als zentrales Wissen über Services in der Cloud verwendet wird.

Spring Cloud Zookeeper bietetApache Zookeeper Integration für Spring Boot-Apps durch automatische Konfiguration und Bindung an die Spring-Umgebung.

2. Service Discovery Setup

Wir werden zwei Apps erstellen:

  • Eine App, die einen Dienst bereitstellt (in diesem Artikel alsService Provider) bezeichnet

  • Eine App, die diesen Dienst nutzt (Service Consumer genannt)

Apache Zookeeper fungiert als Koordinator in unserem Service Discovery-Setup. Installationsanweisungen für Apache Zookeeper finden Sie unter den folgendenlink.

3. Registrierung des Dienstanbieters

Wir aktivieren die Dienstregistrierung, indem wir die Abhängigkeit vonspring-cloud-starter-zookeeper-discoveryhinzufügen und die Anmerkung@EnableDiscoveryClient in der Hauptanwendung verwenden.

Im Folgenden zeigen wir diesen Vorgang Schritt für Schritt für den Dienst, der als Antwort auf GET-Anforderungen die Meldung „Hello World!“ Zurückgibt.

3.1. Maven-Abhängigkeiten

Fügen wir zunächst die erforderlichen Abhängigkeitenspring-cloud-starter-zookeeper-discovery,spring-web,spring-cloud-dependencies undspring-boot-starter zu unserer Dateipom.xmlhinzu:


    
        org.springframework.boot
    spring-boot-starter
    1.5.2.RELEASE
    
    
        org.springframework
    spring-web
        4.3.7.RELEASE
    
    
        org.springframework.cloud
        spring-cloud-starter-zookeeper-discovery
        1.0.3.RELEASE
     


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Brixton.SR7
            pom
            import
        
    

3.2. Anmerkungen des Dienstanbieters

Als nächstes werden wir unsere Hauptklasse mit@EnableDiscoveryClient kommentieren. Dadurch wird die Anwendungserkennung vonHelloWorlderkannt:

@SpringBootApplication
@EnableDiscoveryClient
public class HelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

Und eine einfache Steuerung:

@GetMapping("/helloworld")
public String helloWorld() {
    return "Hello World!";
}

3.3. YAML-Konfigurationen

Lassen Sie uns nun eine YAMLApplication.yml-Datei erstellen, die zum Konfigurieren der Anwendungsprotokollstufe und zum Informieren von Zookeeper darüber verwendet wird, dass die Anwendung für die Erkennung aktiviert ist.

Der Name der Anwendung, mit der Zookeeper registriert wird, ist der wichtigste. Später im Service-Consumer verwendet der Client einesfeigndiesen Namen während der Serviceerkennung:

spring:
  application:
    name: HelloWorld
  cloud:
    zookeeper:
      discovery:
        enabled: true
logging:
  level:
    org.apache.zookeeper.ClientCnxn: WARN

Die Spring Boot-Anwendung sucht nach zookeeper an Standardport 2181. Wenn sich der Tierpfleger an einer anderen Stelle befindet, muss die Konfiguration hinzugefügt werden:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181

4. Service-Verbraucher

Jetzt erstellen wir einen REST-Service-Consumer und registrieren ihn mitspring Netflix Feign Client.

4.1. Maven-Abhängigkeit

Fügen wir zunächst die erforderlichen Abhängigkeitenspring-cloud-starter-zookeeper-discovery,spring-web,spring-cloud-dependencies,spring-boot-starter-actuator undspring-cloud-starter-feign zu unsererpom.xml-Datei hinzu:


    
        org.springframework.cloud
        spring-cloud-starter-zookeeper-discovery
        1.0.3.RELEASE
    
    
        org.springframework.boot
        spring-boot-starter-actuator
        1.5.2.RELEASE
    
    
        org.springframework.cloud
        spring-cloud-starter-feign
        1.2.5.RELEASE
    


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Brixton.SR7
            pom
            import
        
    

4.2. Service Consumer Annotations

Wie beim Dienstanbieter werden wir die Hauptklasse mit@EnableDiscoveryClient versehen, um sie für die Erkennung zu sensibilisieren:

@SpringBootApplication
@EnableDiscoveryClient
public class GreetingApplication {

    public static void main(String[] args) {
        SpringApplication.run(GreetingApplication.class, args);
    }
}

4.3. Entdecken Sie den Service mit Feign Client

Wir werden dasSpring Cloud Feign Integration,-Projekt von Netflix verwenden, mit dem Sie einen deklarativen REST-Client definieren können. Wir erklären, wie die URL aussieht und übernehmen die Verbindung zum REST-Service.

DasFeign Client wird über dasspring-cloud-starter-feign-Paket importiert. Wir werden@Configuration mit@EnableFeignClients versehen, um es in der Anwendung zu verwenden.

Schließlich kommentieren wir eine Schnittstelle mit@FeignClient(“service-name”) und verbinden sie automatisch mit unserer Anwendung, damit wir programmgesteuert auf diesen Dienst zugreifen können.

Hier in der Annotation@FeignClient(name = “HelloWorld”) beziehen wir uns aufservice-name des zuvor erstellten Dienstleisters.

@Configuration
@EnableFeignClients
@EnableDiscoveryClient
public class HelloWorldClient {

    @Autowired
    private TheClient theClient;

    @FeignClient(name = "HelloWorld")
    interface TheClient {

        @RequestMapping(path = "/helloworld", method = RequestMethod.GET)
        @ResponseBody
    String helloWorld();
    }
    public String HelloWorld() {
        return theClient.HelloWorld();
    }
}

4.4. Controller-Klasse

Das Folgende ist die einfache Service-Controller-Klasse, die die Service-Provider-Funktion in unserer vorgetäuschten Client-Klasse aufruft, um den Service (dessen Details durch Service-Discovery abstrahiert werden) über das Objekt der injizierten SchnittstellehelloWorldClientzu nutzen und als Antwort anzuzeigen:

@RestController
public class GreetingController {

    @Autowired
    private HelloWorldClient helloWorldClient;

    @GetMapping("/get-greeting")
    public String greeting() {
        return helloWorldClient.helloWorld();
    }
}

4.5. YAML-Konfigurationen

Als nächstes erstellen wir eine YAML-DateiApplication.yml, die der zuvor verwendeten sehr ähnlich ist. Dadurch wird die Protokollstufe der Anwendung konfiguriert:

logging:
  level:
    org.apache.zookeeper.ClientCnxn: WARN

Die Anwendung sucht nach dem Zookeeper auf Standardport 2181. Wenn sich Zookeeper an einer anderen Stelle befindet, muss die Konfiguration hinzugefügt werden:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181

5. Setup testen

Der HelloWorld-REST-Service registriert sich bei der Bereitstellung bei Zookeeper. Dann ruft der DienstGreeting, der als Dienstkonsument fungiert, den DienstHelloWorldunter Verwendung des Feign-Clients auf.

Jetzt können wir diese beiden Dienste erstellen und ausführen.

Schließlich zeigen wir unseren Browser aufhttp://localhost:8083/get-greeting und er sollte Folgendes anzeigen:

Hello World!

6. Fazit

In diesem Artikel haben wir gesehen, wie die Diensterkennung mitSpring Cloud Zookeeper implementiert wird, und wir haben einen Dienst namensHelloWorld auf dem Zookeeper-Server registriert, der vomGreeting-Dienst mitFeign Clienterkannt und verwendet wird ) s ohne Kenntnis der Standortdetails.

Wie immer ist der Code für diesen Artikel aufGitHub verfügbar.