微架構(gòu) springcloud-08. 初識Eureka

Eureka

何為 Eureka矾芙?

簡單來說Eureka 就是一個服務(wù)管理中心假抄。

思考:在現(xiàn)實的開發(fā)邏輯中隧出,我們把所有的邏輯通通都寫到一個工程下踏志,那么我們的項目會成什么樣子?成千上萬個Java文件都在一個目錄下胀瞪,各種資源文件堆疊在一起针余,這就像把不同年級的學(xué)生都統(tǒng)一到一個超大的教室上課;這就對我們的項目管理造成了很大的困難凄诞,甚至是阻礙圆雁,那么能不能把邏輯拆分以下,projectA 負(fù)責(zé)一部邏輯帆谍,ProjectB 負(fù)責(zé)一部分邏輯伪朽、projectC ……,然后讓各個邏輯之間能夠互相調(diào)用汛蝙、通信烈涮!但管理有事相互獨立的;就像一個企業(yè)窖剑,有人事部坚洽、財務(wù)部、研發(fā)部西土、銷售部和董事會……

那么讶舰,Eureka 就是各個部門相互通信的基站!它負(fù)責(zé)各個project間的聯(lián)絡(luò)與通信!

image

代碼實現(xiàn)步驟:

  1. 新建Eureka服務(wù)中心
  2. 新建App1
  3. 新建App2

目的:使 App1跳昼、App2 能相互通信般甲!

1. 創(chuàng)建Eureka服務(wù)中心

01 idea 創(chuàng)建一個maven Java項目 EurekaService!導(dǎo)入如下依賴:

 <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>

02 創(chuàng)建resources/application.properties 配置文件庐舟,并添加如下配置:

#啟動端口改為 8761
server.port=8761
# 關(guān)閉默認(rèn)注冊到eureka服務(wù)中心(該項目本身就是服務(wù)中心欣除,無需自己注冊自己)
eureka.client.register-with-eureka=false
# 關(guān)閉自動抓取服務(wù)端,該工程本身就是服務(wù)端
eureka.client.fetch-registry=false

03 創(chuàng)建啟動類 person.jack.eureka/EurekaService

package person.jack.eureka;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer /**聲明該啟動是一個Eureka服務(wù)端*/
public class EurekaService {
    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaService.class).web(true).run(args);
    }
}

# 運行main() 方法挪略,啟動Eureka服務(wù)端
……

瀏覽器訪問:http://localhost:8761

# 進入Eureka 首頁
……

# 停止服務(wù)

2. 創(chuàng)建Eureka 客戶端工程AppOne

01 創(chuàng)建一個maven java 工程AppOne,導(dǎo)入如下依賴:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>

02 創(chuàng)建啟動類历帚,person.jack/Appone:

package person.jack;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class AppOne {
    public static void main(String[] args) {
        new SpringApplicationBuilder(AppOne.class).web(true).run(args);
    }
}

03 創(chuàng)建person.jack.controller/HelloController:

package person.jack.controller;

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

@RestController
public class HelloController {

    @ResponseBody
    @RequestMapping(value = "/sayMesg/{word}")
    public String sayMesg(@PathVariable String word){
        return "你傳了一個:" + word ;
    }
}

04 添加配置文件application.properties:

# 應(yīng)用名稱
spring.application.name=AppOne
# eureka服務(wù)端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

05 啟動Eureka 服務(wù)端EurekaService、啟動客戶端AppOne

# 觀察服務(wù)端是否正常啟動
……

# 觀察AppOne 是否能正常啟動
……

06 啟動成功后杠娱,訪問服務(wù)端:http://localhost:8761/

Instances currently registered with Eureka

Application AMIs Availability Zones Status
APPONE n/a (1) (1) UP (1) - LAPTOP-TJDLNJHK:AppOne

AppOne 成功注冊到Eureka服務(wù)中心

創(chuàng)建第二個客戶端AppTwo

  1. 新建第二個客戶端AppTwo,相關(guān)依賴同Appone相同:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>
  1. 創(chuàng)建application.properties:
# 應(yīng)用名稱
spring.application.name=AppTwo
# eureka服務(wù)端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
  1. pom.xml 新加入依賴:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
  1. 創(chuàng)建啟動類 person.jack/AppTwo
package person.jack;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class AppTwo {
    public static void main(String[] args) {
        new SpringApplicationBuilder(AppTwo.class).web(true).run(args);
    }
}
  1. 創(chuàng)建配置工具類 person.jack.config/MyConfig挽牢,將RestTemplate 配置到IOC容器:
package person.jack.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class MyConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
  1. 創(chuàng)建 person.jack.controller/AppTwoHello
package person.jack.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class AppTwoHello {

    @Autowired
    private RestTemplate restTemplate;

    @ResponseBody
    @RequestMapping("/getAppOneMesg/{mesg}")
    public String getAppOneMesg(@PathVariable String mesg){
        String strMesg=restTemplate.getForObject("http://APPONE/sayMesg/" + mesg, String.class);
        return "訪問App2,從App1 收到信息:“"+strMesg+"“";
    }
}
  1. AppTwo 代碼編寫完成!依次啟動EurekaService摊求、AppOne禽拔、AppTwo
# 注意觀察服務(wù)是否成功啟動

調(diào)用測試

  1. 訪問Eureka 服務(wù)中心: http://localhost:8761/

頁面打印

Instances currently registered with Eureka

Application AMIs Availability Zones Status
APPONE n/a (1) (1) UP (1) - LAPTOP-TJDLNJHK:AppOne
APPTWO n/a (1) (1) UP (1) - LAPTOP-TJDLNJHK:AppTwo:8081

現(xiàn)在,Eureka服務(wù)中心已經(jīng)有了兩個應(yīng)用了室叉!

  1. 訪問 http://localhost:8081/getAppOneMesg/hello 睹栖,測試是否能連通AppOne
# 頁面打印
訪問App2,從App1 收到信息:“你傳了一個:hello“

# 訪問成功!AppTwo 成功連通茧痕、并調(diào)用AppOne

測試成功野来!第一個Euraka 環(huán)境搭建完成!

本章踪旷,完曼氛!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市令野,隨后出現(xiàn)的幾起案子枯跑,更是在濱河造成了極大的恐慌妆兑,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件之碗,死亡現(xiàn)場離奇詭異纱昧,居然都是意外死亡枫绅,警方通過查閱死者的電腦和手機宗收,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門干茉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朴下,你說我怎么就攤上這事努咐】噍铮” “怎么了殴胧?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我团滥,道長竿屹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任灸姊,我火速辦了婚禮拱燃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘力惯。我一直安慰自己碗誉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布父晶。 她就那樣靜靜地躺著哮缺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甲喝。 梳的紋絲不亂的頭發(fā)上尝苇,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音埠胖,去河邊找鬼糠溜。 笑死,一個胖子當(dāng)著我的面吹牛直撤,可吹牛的內(nèi)容都是我干的非竿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼谊惭,長吁一口氣:“原來是場噩夢啊……” “哼汽馋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起圈盔,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤豹芯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驱敲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铁蹈,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年众眨,在試婚紗的時候發(fā)現(xiàn)自己被綠了握牧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娩梨,死狀恐怖沿腰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狈定,我是刑警寧澤颂龙,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布习蓬,位于F島的核電站,受9級特大地震影響措嵌,放射性物質(zhì)發(fā)生泄漏躲叼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一企巢、第九天 我趴在偏房一處隱蔽的房頂上張望枫慷。 院中可真熱鬧,春花似錦浪规、人聲如沸或听。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽神帅。三九已至,卻和暖如春萌抵,著一層夾襖步出監(jiān)牢的瞬間找御,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工绍填, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霎桅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓讨永,卻偏偏與公主長得像滔驶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卿闹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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