SpringCloud使用Consul作為服務治理中心
前言
我們在進行開發分布式架構的系統時,有一個不可或缺的工具那就是服務治理組件,我們可以通過它來實作服務的注冊、發布和呼叫,可以理解為它維護著我們所有服務的花名冊,目前主流的服務治理中心有Zookeeper、Eureka、Nacos等,但是今天這里我想和大家介紹一下另一種服務治理組件—Consul,
Nacos的使用可以參考我的博客:Nacos服務治理中心和配置中心
正文
Consul
Consul是一個Spring Cloud 中集成好的開源的分布式的服務注冊發現中心,
由Go語言撰寫,支持健康檢查,多資料中心還支持k-v存盤,采用Raft一致性演算法,保證強一致性,可用性,并且和docker完美兼容,
Consul本身也是一種服務治理中心,相對于Eureka而言:
Consul犧牲了部分的性能,保證了服務的強一致性,Eureka只要服務注冊到主節點,就認為服務注冊成功,不關其他節點是否可以正常呼叫,
Consul vs Eureka vs Zookeeper

CAP原理分別指的是,資料一致性、資料可用性、磁區耐受性 ,這里AP和CP分別指的是:
AP模式: 犧牲強一致性,部分節點宕機,不會影響正常作業的節點,CP模式: 犧牲資料可用性,為了保證資料的一致性,當一臺機器出現故障時,所有節點的資料都不能使用,
一致性演算法,使一組服務器在一個值上達成一致,所以活躍的特征在于最終每個服務器都可以決定一個值,通過值的一致能夠實作對同一個資料的請求會讓同一個服務器來處理,Paxos和Raft都是通過選取master來實作多節點下值的一致性,
Consul的安裝及啟動
第一步:下載consul
根據自身的系統從官網選擇合適的版本,我這里使用的是Mac,可以直接使用brew下載
同樣使用Mac的小伙伴可以參考我的博客:使用Mac系統來進行Java編程
brew install consul
第二步:啟動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:加入的集群地址
第三步:進入http://localhost:8500/ui/dc1/services進入Consul UI界面

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界面看到新注冊的服務


CSDN認證博客專家
Java
Redis
架構
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/148050.html
標籤:其他
上一篇:頂尖的網站建設公司
