springboot2.x整合consul簡單入門

最近由于要求,需要我們了解consul,然后就看著文檔,寫了一個簡單的入門demo.

consul是什么?

關(guān)于consul實質(zhì)上跟springcloud的Eureka一樣,作為微服務(wù)架構(gòu)中的服務(wù)注冊和發(fā)現(xiàn)的角色出現(xiàn)在我們的面前,至于它具體的內(nèi)部架構(gòu)東西,大家可以看看它的官網(wǎng)consul官網(wǎng),大家也可以跟eureka進行對比,怎么說了各有千秋,雖然官方停止了對Eureka的維護,但作為新手,值得去學習它,話不多說了,接著看.

consul本地安裝過程

進入consul官網(wǎng)之后,選擇對應系統(tǒng)的進行下載如圖所示:

微信截圖_20191011182949.png

我這里下載的win64位的,然后在對應保存的目錄下直接解壓如圖:

微信截圖_20191011183233.png

至于圖中的consul.bat大家忽略,這是我寫的consul啟動腳本,主要是為了方便而已,不影響,接著用cmd命令來進行操作consul,如圖:

微信截圖_20191011183707.png

注意:在consul的安裝目錄下進行cmd命令操作,輸入圖中命令:

consul agent -dev

啟動成功之后直接訪問:http://localhost:8500后來到consul的管理界面如圖:

微信截圖_20191011184133.png

看到該頁面說明我們的consul啟動成功了,接下來我們來進入今天的主題就是如何用springboot來整合consul的過程

consul整合過程

首先用我們的開發(fā)工具idea來創(chuàng)建一個emptyProject,我這里的項目名為consul-server,接著在該項目的下面創(chuàng)建字模塊項目,我這里服務(wù)的提供者為consul-producer,(注意在創(chuàng)建的過程中使用springboot來搭建,我這里服務(wù)的發(fā)現(xiàn)選擇consul),然后一路next即可

  • 接下來是需要導入我們相關(guān)依賴,代碼如下:
 <dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<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>

接著看我們的啟動類,代碼如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author cb
 */
  @SpringBootApplication
@EnableDiscoveryClient
public class ConsulProducerApplication {

public static void main(String[] args) {
    SpringApplication.run(ConsulProducerApplication.class, args);
}

我們需要在啟動類上添加注解@EnableDiscoveryClient,其目的是為了讓consul能夠發(fā)現(xiàn)自己的服務(wù),接著來看我們的配置文件,代碼如下:

server.port=8080
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.application.name=consul-producer
#注冊到consul的服務(wù)名稱
spring.cloud.consul.discovery.service-name=${spring.application.name}

上述是簡單的配置,一般自己玩只需要這幾個即可,在實際的開發(fā)中有需求的可以自己去加,我們啟動一下來看一下在consul管理頁面中是否存在我們的服務(wù),運行結(jié)果如圖所示:

微信截圖_20191011212856.png

如我們想象的一樣,在管理界面中出現(xiàn)了我們的服務(wù),接著我們來創(chuàng)建一個接口來測試一下,代碼如下:

package com.consul.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author cb
 */
@RestController
@RequestMapping("producer")
public class ProducerController {

@RequestMapping("hello")
public String hello(){

    return "hello consul";
}

在瀏覽器上輸入地址http://localhost:8080/producer/hello,在頁面中會打印hello consul的字樣,就這樣我們的服務(wù)提供者完成了創(chuàng)建,很簡單吧,為了讓我們體驗下注冊時的負載均衡效果,我們在來創(chuàng)建一個跟上一個一模一樣的服務(wù)提供者我這里的服務(wù)名為consul-producer1,創(chuàng)建過程和pom文件一樣,唯一區(qū)別在于配置文件的端口配置,配置代碼如下:

server.port=8081
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.application.name=consul-producer
#注冊到consul的服務(wù)名稱
spring.cloud.consul.discovery.service-name=${spring.application.name}

接著我們來啟動下我們的子模塊consul-producer1,然后在我們的consul管理界面臺中進行查看,如圖:

微信截圖_20191011214854.png

在管理臺界面中看到了我們的兩個服務(wù),雖然服務(wù)名相同,但port不一樣,總之使我們想要的結(jié)果,接下來我們需要創(chuàng)建一個服務(wù)的消費方來對我們的服務(wù)進行隨機輪詢訪問,這也體現(xiàn)了微服務(wù)的負載均衡策略.

服務(wù)消費方

首先創(chuàng)建一個名為consul-consumer的子項目,同樣在pom文件需要引入對應的依賴,實際跟我們consul-producer的pom依賴一樣,直接cv即可,這里就不重復了,接著看我們的啟動類,代碼如下:

package com.consul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author cb
 */
@SpringBootApplication
public class ConsulConsumerApplication {

public static void main(String[] args) {
    SpringApplication.run(ConsulConsumerApplication.class, args);
}

接著看配置文件,代碼如下:

server.port=8082
spring.application.name=consul-consumer
spring.cloud.consul.discovery.service-name=${spring.application.name}
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
#消費端不需要注冊到consul中
spring.cloud.consul.discovery.register=false

作為服務(wù)的消費者,這里我們就不必將它作為服務(wù)進行注冊,接著寫個測試接口進行測試,代碼如下:

 com.consul.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 *
 * @author cb
 */
@RestController
public class ServiceController {

@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private DiscoveryClient discoveryClient;

/**
 * 獲取所有的服務(wù)
 * @return
 */
@RequestMapping("services")
public Object getServices(){

    List<ServiceInstance> instances = discoveryClient.getInstances("consul-producer");
    System.out.println(instances.toString());
    return instances;
}

/**
 * 輪訓獲取服務(wù)中的其中一個
 * @return
 */
@RequestMapping("discover")
public String discover(){

   return loadBalancerClient.choose("consul-producer").toString();
}

我們訪問http://localhost:8082/services來獲取所有的服務(wù)實例,運行結(jié)果如下:

DefaultServiceInstance{instanceId='consul-producer-8080', serviceId='consul-producer', host='DESKTOP-NSAK1VJ', port=8080, secure=false, metadata={secure=false}
DefaultServiceInstance{instanceId='consul-producer-8081', serviceId='consul-producer', host='DESKTOP-NSAK1VJ', port=8081, secure=false, metadata={secure=false}}

上面的結(jié)果使我們進行接口訪問之后的結(jié)果,可以看到的是我們此時有兩個服務(wù)名為consul-producer的服務(wù)實例,再一次通過訪問我們http://localhost:8082/discover,會發(fā)現(xiàn)兩個服務(wù)輪詢訪問,如圖:

微信截圖_20191011221822.png
微信截圖_20191011221901.png

上述就是運行結(jié)果,百看不如親自測試一遍,到這里我的入門就講完了,入門級的教程,也是在嘗試中,下篇我會寫一個springboot2.x整合consul再加RabbitMQ的入門級教程.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翩瓜,一起剝皮案震驚了整個濱河市蛛勉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沮尿,老刑警劉巖赖舟,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缴饭,死亡現(xiàn)場離奇詭異医瘫,居然都是意外死亡猾骡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門蚜印,熙熙樓的掌柜王于貴愁眉苦臉地迎上來莺禁,“玉大人,你說我怎么就攤上這事晒哄≌鲈祝” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵寝凌,是天一觀的道長柒傻。 經(jīng)常有香客問我,道長较木,這世上最難降的妖魔是什么红符? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮伐债,結(jié)果婚禮上预侯,老公的妹妹穿的比我還像新娘。我一直安慰自己峰锁,他們只是感情好萎馅,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虹蒋,像睡著了一般糜芳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魄衅,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天峭竣,我揣著相機與錄音,去河邊找鬼晃虫。 笑死皆撩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哲银。 我是一名探鬼主播扛吞,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荆责!你這毒婦竟也來了喻粹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤草巡,失蹤者是張志新(化名)和其女友劉穎守呜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體山憨,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡查乒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了郁竟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玛迄。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棚亩,靈堂內(nèi)的尸體忽然破棺而出蓖议,到底是詐尸還是另有隱情虏杰,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布勒虾,位于F島的核電站纺阔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏修然。R本人自食惡果不足惜笛钝,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愕宋。 院中可真熱鬧玻靡,春花似錦、人聲如沸中贝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邻寿。三九已至最蕾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間老厌,已是汗流浹背瘟则。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枝秤,地道東北人醋拧。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像淀弹,于是被迫代替她去往敵國和親丹壕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 由于文章太長薇溃,簡書放不下菌赖,完整文檔見Consul文檔。 一沐序、安裝 Consul Consul 的安裝很簡單琉用,安裝 ...
    FlySheep_ly閱讀 10,096評論 1 13
  • 一、安裝 Consul Consul 下載地址:https://www.consul.io/downloads.h...
    FlySheep_ly閱讀 5,373評論 0 3
  • 一策幼、Consul簡介 Consul 是一套開源的分布式服務(wù)發(fā)現(xiàn)和配置管理系統(tǒng)邑时,由 HashiCorp 公司用 Go...
    QIQIHAL閱讀 4,910評論 0 11
  • 1.啟動一個帶ACL 控制的Agent 首先,從這個網(wǎng)址下載consul特姐,解壓后發(fā)現(xiàn)就是個可執(zhí)行文件晶丘,如果不可以執(zhí)...
    YellowStar5_閱讀 8,031評論 0 1
  • 1)標準輸入(stdin):代碼為0,使用0<或0<<,其中代碼0可以省略2)標準輸出(stdout):代碼為1浅浮,...
    傳說中的水牛閱讀 201評論 0 0