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.