SpringCloudZookeeperの紹介
1. 序章
この記事では、Zookeeperと、クラウド内のサービスに関する一元化された知識として使用されるServiceDiscoveryでのZookeeperの使用方法について説明します。
Spring Cloud Zookeeperは、自動構成とSpring環境へのバインドを通じて、SpringBootアプリにApacheZookeeper統合を提供します。
2. サービスディスカバリのセットアップ
2つのアプリを作成します。
- サービスを提供するアプリ(この記事ではサービスプロバイダー と呼びます)
- このサービスを利用するアプリ(サービスコンシューマーと呼ばれます)
Apache Zookeeperは、サービス検出セットアップのコーディネーターとして機能します。 Apache Zookeeperのインストール手順は、次のリンクで入手できます。
3. サービスプロバイダー登録
spring-cloud-starter-zookeeper-discovery 依存関係を追加し、メインアプリケーションでアノテーション @EnableDiscoveryClient を使用して、サービス登録を有効にします。
以下に、「HelloWorld!」を返すサービスのこのプロセスを段階的に示します。 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 NetflixFeignClientを使用して登録します。
4.1. Mavenの依存関係
まず、必要な spring -cloud-starter-zookeeper-discovery、spring -web、spring -cloud-dependencies、spring -boot-starter-actuator 、 spring -cloud-starter-feign pom.xml ファイルへの依存関係:
<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. FeignClientでサービスを発見
宣言型RESTクライアントを定義できるNetflixのプロジェクトSpringCloud FeignIntegrationを使用します。 URLがどのように見えるかを宣言し、feignがRESTサービスへの接続を処理します。
Feign Client は、spring-cloud-starter-feignパッケージを介してインポートされます。 @Configurationに@EnableFeignClientsの注釈を付けて、アプリケーション内で使用できるようにします。
最後に、 @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サービスを呼び出します。
これで、これら2つのサービスを構築して実行できます。
最後に、ブラウザで http:// localhost:8083 / get-greeting を指定すると、次のように表示されます。
Hello World!
6. 結論
この記事では、 Spring Cloud Zookeeper を使用してサービス検出を実装する方法を確認し、[X218X]HelloWorldというサービスをZookeeperサーバーに登録して
いつものように、この記事のコードは GitHubで入手できます。