微服務:SpringCloud 使用consul來代替eureka註冊中心

Consul HashiCorp 公司推出的開源工具,用於實現分佈式系統的服務發現與配置。與其它分佈式服 務註冊與發現的方案,Consul 的方案更一站式,內置了服務註冊與發現框 架、分佈一致性協議實 現、健康檢查、Key/Value 存儲、多數據中心方案,不再需要依賴其它工具(比如 ZooKeeper 等)。 使用起來也較 爲簡單。Consul 使用 Go 語言編寫,因此具有天然可移植性(支持Linuxwindows和 Mac OS X);安裝包僅包含一個可執行文件,方便部署,與 Docker 等輕量級容器可無縫配合。
 

一、下載

官網:https://www.consul.io/downloads.html

二、開啓consul

我們可以下載windows版本的,然後呢,直接命令行啓動就可以了

如果下面這樣 就是啓動成功

我們可以輸入http://localhost:8500/ui/dc1/services,查看頁面

consul給我們提供了一些api。比如:

(1)註冊服務:通過postman發送put請求到localhost:8500/v1/catalog/register地址可以完成服務

{
 "Datacenter": "dc1", 
 "Node": "node01", 
 "Address": "192.168.74.102",
 "Service": {
 "ID":"mysql-01",
 "Service": "mysql", 
 "tags": ["master","v1"], 
 "Address": "192.168.74.102",
 "Port": 3306
 }
}

但是由於是api註冊的,進行心跳健康檢查的時候,發現沒有。

(2)服務查詢:通過postman發送get請求到 localhost:8500/v1/catalog/services查看所有的服務列表

通過postman發送get請求到 localhost:8500/v1/catalog/service/服務名 查看具體的服務詳情

(3)服務刪除:通過postman發送put請求到localhost:8500/v1/catalog/deregister刪除服務

三、微服務註冊到consul

跟之前的基礎項目是一樣的

添加product_service依賴

 <!--springcloud 提供的對基於consul的服務發現-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--actuator的健康檢查-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

修改product_service配置

server:
  port: 9001 #端口
spring:
  application:
    name: service-product #服務名稱
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
    username: root
    password: 111111
  jpa:
    database: MySQL
    show-sql: true
    open-in-view: true
  ###開始配置consul的服務註冊
  cloud:
    consul:
      host: 127.0.0.1 #consul服務器的主機地址
      port: 8500 #consul服務器的端口有
      discovery:
        #是否需要註冊
        register: true
        #註冊的實例ID (唯一標誌)
        instance-id: ${spring.application.name}-1
        #服務的名稱
        service-name: ${spring.application.name}
        #服務的請求端口
        port: ${server.port}
        #指定開啓ip地址註冊
        prefer-ip-address: true
        #當前服務的請求ip
        ip-address: ${spring.cloud.client.ip-address}

直接啓動項目

四、消費者調用提供者



    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--springcloud 提供的對基於consul的服務發現-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--actuator的健康檢查-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
server:
  port: 9002 #端口
spring:
  application:
    name: service-order #服務名稱
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
    username: root
    password: 111111
  jpa:
    database: MySQL
    show-sql: true
    open-in-view: true
  ###開始配置consul的服務註冊
  cloud:
    consul:
      host: 127.0.0.1 #consul服務器的主機地址
      port: 8500 #consul服務器的ip地址
      discovery:
        #是否需要註冊
        register: true
        #註冊的實例ID (唯一標誌)
        instance-id: ${spring.application.name}-1
        #服務的名稱
        service-name: ${spring.application.name}
        #服務的請求端口
        port: ${server.port}
        #指定開啓ip地址註冊
        prefer-ip-address: true
        #當前服務的請求ip
        ip-address: ${spring.cloud.client.ip-address}

啓動項目:

成功!!!

 源碼:[email protected]:Zesystem/springclouddemoconsul.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章