SpringCloudはConsulをサービスガバナンスセンターとして使用しています
序文
分散アーキテクチャシステムを開発する場合、サービスガバナンスコンポーネントである不可欠なツールがあります。これを使用して、サービスの登録、公開、および呼び出しを行うことができます。これは、すべてのサービスの名簿を維持していると理解できます。 。現在の主流のサービス管理センターZookeeper
、Eureka
などNacos
ですが、ここでは、別のサービスガバナンスコンポーネントについて説明しますConsul
。
Nacosの使用については、私のブログを参照してください:Nacos Service Management Center and Configuration Center
テキスト
領事
Consulは、Spring Cloud
統合されたオープンソースの分散サービス登録検出センターです。言語
によってGo
書かれました。ヘルスチェックをサポートし、マルチデータセンターはkvストレージもサポートし、Raft
一貫性アルゴリズムを採用して強力な一貫性と可用性を確保します。そしてそれはdocker
完全に互換性があります。
領事自体は、以下とは対照的に、サービスガバナンスセンターでもありますEureka
。
Consul
強力なサービスの一貫性を確保するために、パフォーマンスの一部が犠牲になっています。Eureka
サービスがマスターノードに登録されている限り、他のノードを正常に呼び出すことができるかどうかに関係なく、サービスの登録は成功したと見なされます。
領事vsユーレカvs動物園管理人
CAP
原則は、データの整合性、データの可用性、および分割耐性を参照してくださいそれぞれ。ここAP
とCP
を参照してください。
AP模式
:強い一貫性を犠牲にして、一部のノードがダウンし、通常の動作ノードは影響を受けません。CP模式
:データの可用性を犠牲にして、データの一貫性を確保するために、マシンに障害が発生した場合、すべてのノードのデータを使用することはできません。
コンセンサスアルゴリズムにより、サーバーのグループが値について合意するため、アクティブな機能は、各サーバーが最終的に値を決定できることです。同じデータ要求が同じサーバーによって処理されることにより、同じ値を達成できます。Paxos
そして、マルチノードの実装Raft
されたmaster
整合性値によって選択されます。
領事のインストールと起動
ステップ1:ダウンロードconsul
ご使用のシステムに応じて、公式Webサイトから適切なバージョンを選択してください。ここで使用しているのはMac
、直接brew
ダウンロードできることです
。Macを使用している友人も、私のブログを参照できます。JavaプログラミングにMacシステムを使用する
brew install consul
ステップ2:開始consul
./consul agent -dev -ui -client 0.0.0.0
起動コマンドのパラメータの説明:
agent
:Consul
コアコマンドである主な機能は、メンバー情報の維持、ステータス検出の実行、サービスの宣言、要求の処理などです。-server
:代表的なserver
モードです-ui
:web
コントロールパネルに代わって-bootstrap-expect
:作成するクラスターの数を表します。公式の推奨値は3または5です。-data-dir
:データストレージディレクトリ-node
:現在のnode
名前を表します-client
:クライアントサービスによって登録されたアドレスである必要があります。これはserver
、現在のホストアドレスまたは別のホストアドレスと同じにすることができます。システムのデフォルトは127.0.0.1です。-bind
:クラスター通信アドレス-join
:参加したクラスターのアドレス
ステップ3:http:// localhost:8500 / ui / dc1 / servicesと入力して、ConsulUIインターフェイスに入ります
SpringCloudはConsulをサービスガバナンスセンターとして使用しています
Mavenの依存関係
Consul
そこ一定の要件ですためSpringBoot
とSpringCloud
バージョンは、それほどdemo
の比較的完全な依存関係の例をされているここに示します。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<lombok-version>1.18.2</lombok-version>
</properties>
<dependencies>
<!--actuator用于检查节点健康-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Spring Cloud Consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--spring boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${
lombok-version}</version>
<optional>true</optional>
</dependency>
</dependencies>
<!--加入Spring Cloud 的Dalston版本的配置依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
application.properties:構成クラス
server.port=8080
spring.application.name=springcloud-demo-producer
#consul
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#健康检查路径
spring.cloud.consul.discovery.health-check-path=/actuator/health
spring.cloud.consul.discovery.health-check-interval=15s
spring.cloud.consul.discovery.hostname=127.0.0.1
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.port=${
server.port}
#consul service name
spring.cloud.consul.discovery.serviceName=springcloud-demo-producer
spring.cloud.consul.discovery.heartbeat.enabled=true
SpringCloudProducerApp:スタートアップクラス
@EnableDiscoveryClient
:登録センターへの、consul
またはzookeeper
登録センターとしての登録サービスの提供に使用されます
@Slf4j
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class SpringCloudProducerApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCloudProducerApp.class);
}
/**
* 项目的启动方法
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringCloudProducerApp.class, args);
log.info("======服务已经启动========");
}
}
検証
プロジェクトを開始し、http:// localhost:8500 / ui / dc1 / servicesConsul UIインターフェイスと入力して、新しく登録されたサービスを表示します