Spring Cloud Zookeeper簡介

1.簡介

在本文中,我們將了解Zookeeper及其如何用於服務發現,該服務被用作有關雲中服務的集中知識。

Spring Cloud Zookeeper通過自動配置並綁定到Spring Environment,為Spring Boot應用程序提供了Apache Zookeeper集成。

2.服務發現設置

我們將創建兩個應用程序:

  • 將提供服務的應用程序(在本文中稱為“服務提供者” )
  • 將使用此服務的應用程序(稱為服務使用者

Apache Zookeeper將在我們的服務發現設置中充當協調者。以下鏈接提供了Apache Zookeeper安裝說明。

3.服務提供商註冊

我們將通過添加spring-cloud-starter-zookeeper-discovery依賴性並在主應用程序中使用註釋@EnableDiscoveryClient來啟用服務註冊。

下面,我們將逐步顯示返回“ Hello World!”的服務的此過程。響應GET請求。

3.1。 Maven依賴

首先,讓我們將必需的spring-cloud-starter-zookeeper-discovery , spring-web , spring-cloud-dependenciesspring-boot-starter依賴項添加到我們的pom.xml文件中:

<dependencies>

 <dependency>

 <groupId>org.springframework.boot</groupId>


 <artifactId>spring-boot-starter</artifactId>


 <version>2.2.6.RELEASE</version>

 </dependency>

 <dependency>

 <groupId>org.springframework</groupId>


 <artifactId>spring-web</artifactId>

 <version>5.1.14.RELEASE</version>

 </dependency>

 <dependency>

 <groupId>org.springframework.cloud</groupId>

 <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>

 </dependency>

 </dependencies>

 <dependencyManagement>

 <dependencies>

 <dependency>

 <groupId>org.springframework.cloud</groupId>

 <artifactId>spring-cloud-dependencies</artifactId>

 <version>Hoxton.SR4</version>

 <type>pom</type>

 <scope>import</scope>

 </dependency>

 </dependencies>

 </dependencyManagement>

3.2。服務提供商註解

接下來,我們將使用@EnableDiscoveryClient註釋主類。這將使HelloWorld應用程序能夠感知發現:

@SpringBootApplication

 @EnableDiscoveryClient

 public class HelloWorldApplication {

 public static void main(String[] args) {

 SpringApplication.run(HelloWorldApplication.class, args);

 }

 }

和一個簡單的控制器:

@GetMapping("/helloworld")

 public String helloWorld() {

 return "Hello World!";

 }

3.3。 YAML配置

現在,讓我們創建一個YAML Application.yml文件,該文件將用於配置應用程序日誌級別並通知Zookeeper該應用程序已啟用發現功能。

最重要的是要註冊到Zookeeper的應用程序的名稱。稍後在服務使用者中, feign客戶端將在服務發現期間使用此名稱:

spring:

 application:

 name: HelloWorld

 cloud:

 zookeeper:

 discovery:

 enabled: true

 logging:

 level:

 org.apache.zookeeper.ClientCnxn: WARN

Spring Boot應用程序在默認端口2181上查找zookeeper。如果zookeeper位於其他位置,則需要添加配置:

spring:

 cloud:

 zookeeper:

 connect-string: localhost:2181

4.服務消費者

現在,我們將創建一個REST服務使用者,並使用Spring Netflix Feign Client註冊它。

4.1。 Maven依賴

首先,讓我們在pom.xml文件中添加所需的spring-cloud-starter-zookeeper-discovery , spring-web , spring-cloud-dependencies , spring-boot-starter-actuatorspring-cloud-starter-feign依賴項:

<dependencies>

 <dependency>

 <groupId>org.springframework.cloud</groupId>

 <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>

 </dependency>

 <dependency>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-starter-actuator</artifactId>

 <version>2.2.6.RELEASE</version>

 </dependency>

 <dependency>

 <groupId>org.springframework.cloud</groupId>

 <artifactId>spring-cloud-starter-feign</artifactId>

 </dependency>

 </dependencies>

 <dependencyManagement>

 <dependencies>

 <dependency>

 <groupId>org.springframework.cloud</groupId>

 <artifactId>spring-cloud-dependencies</artifactId>

 <version>Hoxton.SR4</version>

 <type>pom</type>

 <scope>import</scope>

 </dependency>

 </dependencies>

 </dependencyManagement>


4.2。服務使用者註釋

與服務提供者一樣,我們將使用@EnableDiscoveryClient註釋主類,以使其能夠感知發現:

@SpringBootApplication

 @EnableDiscoveryClient

 public class GreetingApplication {



 public static void main(String[] args) {

 SpringApplication.run(GreetingApplication.class, args);

 }

 }

4.3。通過虛假客戶發現服務

我們將使用Spring Cloud Feign Integration,這是Netflix的一個項目,可讓您定義聲明性REST客戶端。我們聲明URL的外觀,偽裝負責連接到REST服務。

Feign Client通過spring-cloud-starter-feign Feign Client導入。我們將使用@EnableFeignClients註釋@Configuration ,以在應用程序中使用它。

最後,我們用@FeignClient(“service-name”)註釋一個接口,並將其自動連接到我們的應用程序中,以便我們以編程方式訪問此服務。

在註釋@FeignClient(name = “HelloWorld”) ,我們引用先前創建的服務生產者的service-name

@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。控制器類

以下是簡單的服務控制器類,它將通過偽裝的接口helloWorldClient對象調用我們的偽客戶端類上的服務提供者函數以使用服務(其詳細信息通過服務發現進行抽象),並在響應中顯示該服務:

@RestController

 public class GreetingController {



 @Autowired

 private HelloWorldClient helloWorldClient;



 @GetMapping("/get-greeting")

 public String greeting() {

 return helloWorldClient.helloWorld();

 }

 }

4.5。 YAML配置

接下來,我們創建一個YAML文件Application.yml ,該文件與之前使用的文件非常相似。這將配置應用程序的日誌級別:

logging:

 level:

 org.apache.zookeeper.ClientCnxn: WARN

該應用程序在默認端口2181上查找Zookeeper。如果Zookeeper位於其他位置,則需要添加配置:

spring:

 cloud:

 zookeeper:

 connect-string: localhost:2181

5.測試設置

HelloWorld REST服務會在部署時向Zookeeper註冊自己。然後,充當服務使用者的Greeting服務使用Feign客戶端調用HelloWorld服務。

現在,我們可以構建和運行這兩個服務。

最後,我們將瀏覽器指向http://localhost:8083/get-greeting ,它應顯示:

Hello World!

六,結論

在本文中,我們已經看到瞭如何使用Spring Cloud Zookeeper來實現服務發現,並且我們在Zookeeper服務器中註冊了一個名為HelloWorld的服務,該服務Feign Client不知道其位置詳細信息的情況下由Greeting服務使用和發現。

與往常一樣,本文的代碼可在GitHub上獲得