Eureka實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)

前言:

微服務(wù)化要配合自動(dòng)化部署與自動(dòng)化測(cè)試以實(shí)現(xiàn)快速交付
微服務(wù)化容易出現(xiàn)的問(wèn)題有服務(wù)太多的情況下難以發(fā)現(xiàn)和治理玷室、調(diào)用鏈過(guò)長(zhǎng)難以定位問(wèn)題晓勇、調(diào)用鏈過(guò)長(zhǎng)響應(yīng)時(shí)間隨之增加陶耍、系統(tǒng)過(guò)多難以部署和測(cè)試翼虫、系統(tǒng)間復(fù)雜度隨著服務(wù)增多而增大莱衩。
Eureka解決了服務(wù)注冊(cè)與發(fā)現(xiàn)問(wèn)題联贩。
代碼:
https://github.com/KouLouYiMaSi/springcloud

1珍剑、服務(wù)注冊(cè)于發(fā)現(xiàn)

1.1:什么是服務(wù)注冊(cè)與發(fā)現(xiàn)?

  • 服務(wù)發(fā)現(xiàn):顧名思義剪验,發(fā)現(xiàn)一個(gè)服務(wù)
  • 怎么發(fā)現(xiàn)?就是找IP和端口啊
  • 傳統(tǒng)方式怎么找前联?在調(diào)用方里面配置好啊功戚。
  • 云服務(wù)和docker等讓每次啟動(dòng)服務(wù)的IP都不一樣怎么辦?傳統(tǒng)方式就涼拌了似嗤,服務(wù)少還好啸臀,每次改改配置文件,服務(wù)多呢双谆?挨個(gè)改壳咕?不能夠
  • 服務(wù)注冊(cè):給每個(gè)服務(wù)提供一個(gè)注冊(cè)中心,服務(wù)上線的時(shí)候都把自己的IP端口信息注冊(cè)到注冊(cè)中心顽馋,有沒(méi)有發(fā)現(xiàn)原來(lái)每個(gè)服務(wù)的分散式配置都集中到注冊(cè)中心了谓厘?

1.2:Eureka的服務(wù)注冊(cè)與發(fā)現(xiàn)過(guò)程

  • EurekaServer啟動(dòng)的時(shí)候注冊(cè)自己的IP端口服務(wù)名稱等信息
  • EurekaClient作為java客戶端,在服務(wù)啟動(dòng)后周期性的(默認(rèn)30s)向EurekaServer發(fā)送心跳
  • EurekaServer在一定時(shí)間(默認(rèn)90s)沒(méi)有收到某個(gè)服務(wù)的心跳就會(huì)注銷該實(shí)例寸谜,EurekaClient發(fā)送canel命令后也會(huì)注銷該實(shí)例
  • EurekaServer之間會(huì)相互復(fù)制注冊(cè)表信息
  • EurekaClient會(huì)緩存注冊(cè)表信息


    image.png

2竟稳、實(shí)戰(zhàn)Eureka

參見(jiàn)代碼地址:https://github.com/KouLouYiMaSi/springcloud
工具:Intelij Idea

2.1、構(gòu)建步驟

  • 構(gòu)建一個(gè)主maven項(xiàng)目spring-cloud熊痴,pom如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.huo</groupId>
    <artifactId>spring-cloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>eureka-server</module>
        <module>eureka-server-1</module>
        <module>eureka-server-2</module>
        <module>service-hi</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • 構(gòu)建3個(gè)maven module他爸,eureka-server、eureka-server-1果善、eureka-server-2
    在springcloud項(xiàng)目上右鍵诊笤,點(diǎn)new,點(diǎn)Module


    image.png

    選擇spring initializer


    image.png

    填寫必要信息后勾選
    image.png

    構(gòu)建完成打開(kāi)eureka-server這個(gè)子項(xiàng)目巾陕,刪除不必要信息
    image.png
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.huo</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>com.huo</groupId>
        <artifactId>spring-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

</project>
  • 為了直觀讨跟,我們不用同一個(gè)起多個(gè)實(shí)例纪他,而是通過(guò)復(fù)制2個(gè)eureka-server來(lái)實(shí)現(xiàn)直觀的集群,點(diǎn)擊eureka-server項(xiàng)目ctrl+c ctrl+v晾匠,改名字eureka-server-1和eureka-server-2
  • 修改每個(gè)server的yml文件
----eureka-server茶袒,這行不要復(fù)制,下面信息復(fù)制到eureka-server的yml凉馆,以此類推-----
server:
  port: 20001
eureka:
  instance:
    hostname: server1
  client:
    # 表示是否注冊(cè)自身到eureka服務(wù)器,以供其他服務(wù)發(fā)現(xiàn)
    register-with-eureka: true
    # 是否從eureka上獲取注冊(cè)信息
    fetch-registry: true
    # 表示自己的另外兩個(gè)同伴的IP和端口
    service-url:
      defaultZone: http://server2:20002/eureka/,http://server3:20003/eureka/
----eureka-server-1-----
server:
  port: 20002
eureka:
  instance:
    hostname: server2
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://server1:20001/eureka/,http://server3:20003/eureka/
----eureka-server-2-----
server:
  port: 20003
eureka:
  instance:
    hostname: server3
  client:
    # 表示是否注冊(cè)自身到eureka服務(wù)器
    register-with-eureka: true
    # 是否從eureka上獲取注冊(cè)信息
    fetch-registry: true
    service-url:
      defaultZone: http://server1:20001/eureka/,http://server2:20002/eureka/
  • 每個(gè)main文件增加注解就可以了
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
  • 然后配置一下server1薪寓、server2、server3的host澜共,使用switchhost或者直接去etc下面改host文件
server1 127.0.0.1
server2 127.0.0.1
server3 127.0.0.1
  • 構(gòu)建集群完成打開(kāi)瀏覽器隨便輸入localhost:20001或者localhost:20002或者localhost:20003訪問(wèn)就可以看到信息了


    image.png

2.2向叉、重要配置信息說(shuō)明

## eureka : 主要配置屬性在EurekaInstanceConfigBean和EurekaClientConfigBean中
eureka:
  instance:
    # hostname: 127.0.0.1
    # 使用IP注冊(cè)
    preferIpAddress: true
    # 心跳間隔
    lease-renewal-interval-in-seconds: 3
    # 服務(wù)失效時(shí)間: 如果多久沒(méi)有收到請(qǐng)求,則可以刪除服務(wù)
    lease-expiration-duration-in-seconds: 7
  client:
    # 關(guān)閉eureka client
    # enabled: false
    # 注冊(cè)自身到eureka服務(wù)器
    registerWithEureka: true
    # 表示是否從eureka服務(wù)器獲取注冊(cè)信息
    fetchRegistry: false
    # 客戶端從Eureka Server集群里更新Eureka Server信息的頻率
    eureka-service-url-poll-interval-seconds: 60
    # 定義從注冊(cè)中心獲取注冊(cè)服務(wù)的信息
    registry-fetch-interval-seconds: 5
    # 設(shè)置eureka服務(wù)器所在的地址嗦董,查詢服務(wù)和注冊(cè)服務(wù)都需要依賴這個(gè)地址
    serviceUrl:
      defaultZone: http://127.0.0.1:10761/eureka/
       # 設(shè)置eureka服務(wù)器所在的地址植康,可以同時(shí)向多個(gè)服務(wù)注冊(cè)服務(wù)
       # defaultZone: http://192.168.21.3:10761/eureka/,http://192.168.21.4:10761/eureka/
  server:
     # renewal-percent-threshold: 0.1
     # 關(guān)閉自我保護(hù)模式
     enable-self-preservation: false
     # Eureka Server 自我保護(hù)系數(shù),當(dāng)enable-self-preservation=true時(shí)展懈,啟作用
     # renewal-percent-threshold:
     # 設(shè)置清理間隔,單位為毫秒,默認(rèn)為0
     eviction-interval-timer-in-ms: 3000
     # 設(shè)置如果Eureka Server啟動(dòng)時(shí)無(wú)法從臨近Eureka Server節(jié)點(diǎn)獲取注冊(cè)信息销睁,它多久不對(duì)外提供注冊(cè)服務(wù)
     wait-time-in-ms-when-sync-empty: 6000000
     # 集群之間相互更新節(jié)點(diǎn)信息的時(shí)間頻率
     peer-eureka-nodes-update-interval-ms: 60000

2.3、服務(wù)注冊(cè)

  • 隨便創(chuàng)建一個(gè)spring boot項(xiàng)目
  • 修改下yml配置
server:
  port: 8770
  enable-self-preservation: false
spring:
  application:
    name: service-hi
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:20001/eureka/,http://localhost:20002/eureka/,http://localhost:20003/eureka/
  • 打開(kāi)localhost:20001存崖,打開(kāi)20002和20003發(fā)現(xiàn)沒(méi)有這個(gè)SERVICE-HI


    image.png

總結(jié):

當(dāng)使用單節(jié)點(diǎn)模式的時(shí)候把registerWithEureka設(shè)置為false冻记,集群模式設(shè)置為true(默認(rèn)),集群模式設(shè)置為client可以保證自己被其他服務(wù)發(fā)現(xiàn),同時(shí)也可以像客戶端一樣從其他server那里同步注冊(cè)表信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末来惧,一起剝皮案震驚了整個(gè)濱河市冗栗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌供搀,老刑警劉巖隅居,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異葛虐,居然都是意外死亡胎源,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門屿脐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涕蚤,“玉大人,你說(shuō)我怎么就攤上這事的诵⊥蛘ぃ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵西疤,是天一觀的道長(zhǎng)烦粒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)代赁,這世上最難降的妖魔是什么扰她? 我笑而不...
    開(kāi)封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任邮偎,我火速辦了婚禮,結(jié)果婚禮上义黎,老公的妹妹穿的比我還像新娘。我一直安慰自己豁跑,他們只是感情好廉涕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著艇拍,像睡著了一般狐蜕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卸夕,一...
    開(kāi)封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天层释,我揣著相機(jī)與錄音,去河邊找鬼快集。 笑死贡羔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的个初。 我是一名探鬼主播乖寒,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼院溺!你這毒婦竟也來(lái)了楣嘁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤珍逸,失蹤者是張志新(化名)和其女友劉穎逐虚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谆膳,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叭爱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漱病。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涤伐。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缨称,靈堂內(nèi)的尸體忽然破棺而出凝果,到底是詐尸還是另有隱情,我是刑警寧澤睦尽,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布器净,位于F島的核電站,受9級(jí)特大地震影響当凡,放射性物質(zhì)發(fā)生泄漏山害。R本人自食惡果不足惜纠俭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浪慌。 院中可真熱鬧冤荆,春花似錦、人聲如沸权纤。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汹想。三九已至外邓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間古掏,已是汗流浹背损话。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槽唾,地道東北人丧枪。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像庞萍,于是被迫代替她去往敵國(guó)和親豪诲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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