分佈式項目(七)consul 服務註冊與發現

說到分佈式天然就離不開分佈式和微服務的話題,簡單聊一下。html

微服務是一種軟件架構方式,或者說一個一種結構設計風格,它並非標準,它的邏輯是把一個總體服務按業務拆分紅不一樣獨立的服務,下降服務強依賴,消服務器消息驅動,慣用的例子:買東西涉及到訂單,倉庫,扣錢,之前都是把這些功能做在一個項目中,在一個jvm進程中運行,微服務怎麼搞,把訂單,倉庫,扣錢,搞成三個獨立的項目,運行在三個不一樣的jvm進程中,服務之間使用http調用或者mq驅動。java

分佈式是什麼東西呢?分佈式更多的強調的是一種部署方式,上面微服務已經把一個項目拆分紅了幾個不一樣的項目,那如今項目須要運行起來提供對應的服務,因此這就是分佈式的概念,在不一樣的服務器上分散部署不一樣的服務,這裏須要區分分佈式與集羣的區別。集羣咱們通常講都是把redis,MySQL集羣,這裏主要講是把同一種服務分散部署,橫向擴展,達到容災和提高性能,而分佈式講究的不一樣服務,分散部署。mysql

書接上回,在前面的開發中,咱們已經完成了一整套的流程了,已經具有初步部署的條件了,如今咱們就開準備spring cloud環境。 應廣大不怕事兒大的吃瓜羣衆的要求,這裏不使用eruka(由於eruka2.0的一系列問題),而改用consul。git

consul

分佈式繞不開的一個話題,服務註冊、服務發現、服務治理,換句話說,你得讓別人知道你在哪兒,死沒死,怎麼聯繫你。 而consul就是這樣一套開源的分佈式服務器發現、配置管理的系統,內置了服務註冊和發現,分佈式一致性協議,健康檢查, key/value存儲(redis?有點吊),多數據中心((⊙o⊙)… 不明因此),可視化ui,同時它有種運行模式server/client (哦,是否是客戶端像服務端發送某些數據呢)。web

服務註冊

consul兩種註冊實現的方式,一種是服務本身調用consul提供的http api調用實現註冊,spring cloud就是用的這種,另外一種是經過json配置文件來實現註冊,好比你要把mysql註冊上去,就可使用這種方式。redis

服務發現

服務發現也有兩種方式,一種也是經過http api調用,另外一種就是使用consul agent DNS。spring

consul安裝

下載 https://www.consul.io/downloads.html ,下載下來解壓,獲得一個consul的二進制文件。sql

啓動json

./consul agent -server -bootstrap --bind=127.0.0.1 -client 0.0.0.0 -data-dir consul_data -uibootstrap

訪問 http://127.0.0.1:8500/ui 就能看到consul的管理界面了。

spring consul

如今開始spring cloud了,因此建立新工程cloud-work

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

consul-discovery-client

建立consul-discovery-client模塊,用戶集成consul客戶端。

<dependencies>
        <!--spring 實現的consul客戶端,提供服務註冊和發現-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
        <!--actuator 提供健康檢查,consul server會定時調用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--提供http調用服務-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryApplication.class,args);
    }
}
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryApplication.class,args);
    }
}

iot-pt改造

把consul-discovery-client打maven包,在iot-pt項目中引用,並加入spring cloud依賴。

<dependency>
            <groupId>cn.le</groupId>
            <artifactId>consul-discovery-client</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

修改 coap-server

咱們先拿coap-server實現,修改配置文件

coap.port=5683
coap.iot.byte=iot-byte
coap.iot.json=iot-json

spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500

server.port=8090
server.servlet.context-path=/coap-server
spring.application.name=coap-server
#健康檢查路徑
spring.cloud.consul.discovery.health-check-path= 
	${server.servlet.context-path}/actuator/health

啓動項目,打開consul管理頁面

結束語

其它的iot-pt模塊這是按照這種方式來搞,這裏就不一一說明了。想了解更多關於consul的,點擊https://www.cnblogs.com/duanxz/p/7053301.html ,筆者這裏也借鑑了一丟丟(捂臉)。

https://gitee.com/distant/cloud-work.git

https://gitee.com/distant/iot-pt.git

相關文章
相關標籤/搜索