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-dependencies和spring-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-actuator和spring-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上獲得。