Spring Cloud 構(gòu)建微服務(wù)示例項(xiàng)目

基本結(jié)構(gòu)

  • 注冊(cè)中心:EurekaServer
    注冊(cè)中心提供服務(wù)的注冊(cè)和查詢能力服鹅。

  • 服務(wù)提供方:HelloWorldService
    服務(wù)提供方實(shí)現(xiàn)業(yè)務(wù)邏輯讯赏,并將暴露的接口注冊(cè)到注冊(cè)中心棍好。

  • 服務(wù)消費(fèi)方:DemoConsumer
    服務(wù)消費(fèi)方從注冊(cè)中心查詢到服務(wù)提供方的相關(guān)信息彬祖,然后直接訪問(wèn)服務(wù)提供方獲取相關(guān)服務(wù)协怒。

Eureka監(jiān)控界面

EurekaServer

本身也是一個(gè)SpringBoot應(yīng)用前标,啟動(dòng)后成為服務(wù)注冊(cè)中心坠韩,支持多節(jié)點(diǎn)集群,本示例使用單節(jié)點(diǎn)炼列。

配置文件 application.properties

# 設(shè)置spring應(yīng)用命名只搁,可以自定義,非必要
spring.application.name=eureka-server
# 設(shè)置Eureka Server WEB控制臺(tái)端口俭尖,自定義
server.port=8761

#是否將自己注冊(cè)到Eureka-Server中氢惋,默認(rèn)的為true
eureka.client.registerWithEureka=false
#是否從Eureka-Server中獲取服務(wù)注冊(cè)信息,默認(rèn)為true
eureka.client.fetchRegistry=false

Maven依賴

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

啟動(dòng)注解

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

HelloWorldService

實(shí)際上這個(gè)服務(wù)就是一個(gè)標(biāo)準(zhǔn)的SpringBoot Web應(yīng)用,可以部署多個(gè)明肮,使用時(shí)由注冊(cè)中心按指定規(guī)則進(jìn)行選擇菱农。

配置文件 application.properties

# 對(duì)外提供Web服務(wù)的端口號(hào)
server.port=8762

# 服務(wù)注冊(cè)ID,使用該ID可以從注冊(cè)中心獲取服務(wù)實(shí)例
spring.application.name=hello-world-service

# 要注冊(cè)到的注冊(cè)中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

Maven依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

服務(wù)代碼

@RestController
@SpringBootApplication
public class HelloWorldApplication {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "Hello guy!";
    }

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

DemoConsumer

這個(gè)應(yīng)用和之前的HelloWorldService應(yīng)用在配置和Maven依賴上基本一致柿估,區(qū)別就是在代碼中增加了從注冊(cè)中心獲取服務(wù)實(shí)例的部分循未。

使用DiscoveryClient獲取服務(wù)實(shí)例

@Autowired
private DiscoveryClient discoveryClient;

/**
  * 調(diào)用DiscoveryClient獲取服務(wù)實(shí)例列表,取第一個(gè)服務(wù)實(shí)例
  * @return
  */
@RequestMapping(value = "/discovery", method = RequestMethod.GET)
public String discoveryHello() {
    ServiceInstance si = this.discoveryClient.getInstances(serviceId).get(0);
    return sayHello(si);
}

使用LoadBalancerClient獲取服務(wù)實(shí)例

    /**
     * ribbon負(fù)載均衡器秫舌,其中記錄了從Eureka Server中獲取的所有服務(wù)信息的妖。
     * 這些服務(wù)的信息是IP和端口等。應(yīng)用名稱足陨,域名嫂粟,主機(jī)名等信息。
     */
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    /**
     * 調(diào)用LoadBanlanceClient獲取服務(wù)實(shí)例墨缘,choose策略見配置文件
     * @return
     */
    @RequestMapping(value = "/balance", method = RequestMethod.GET)
    public String balanceHello() {
        ServiceInstance si = this.loadBalancerClient.choose(serviceId);
        return sayHello(si);
    }

ribbon選擇策略可以在配置文件中進(jìn)行配置星虹,注意是按服務(wù)進(jìn)行單獨(dú)策略配置的

# 設(shè)置負(fù)載均衡策略
hello-world-service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

其它

這三個(gè)應(yīng)用由于存在依賴關(guān)系,因此啟動(dòng)需要按順序镊讼,首先需要啟動(dòng)EurekaServer宽涌,然后啟動(dòng)HelloWorldService注冊(cè)服務(wù),最后啟動(dòng)DemoConsumer蝶棋。

源碼已上傳到碼云:com.apollo.microService.demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卸亮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玩裙,更是在濱河造成了極大的恐慌兼贸,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃溅,死亡現(xiàn)場(chǎng)離奇詭異溶诞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)罕偎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門很澄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颜及,你說(shuō)我怎么就攤上這事□彘梗” “怎么了俏站?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)痊土。 經(jīng)常有香客問(wèn)我肄扎,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任犯祠,我火速辦了婚禮旭等,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衡载。我一直安慰自己搔耕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布痰娱。 她就那樣靜靜地躺著弃榨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梨睁。 梳的紋絲不亂的頭發(fā)上鲸睛,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音坡贺,去河邊找鬼官辈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛遍坟,可吹牛的內(nèi)容都是我干的钧萍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼政鼠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼风瘦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起公般,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤万搔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后官帘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞬雹,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年刽虹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酗捌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涌哲,死狀恐怖胖缤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阀圾,我是刑警寧澤哪廓,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站初烘,受9級(jí)特大地震影響涡真,放射性物質(zhì)發(fā)生泄漏分俯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一哆料、第九天 我趴在偏房一處隱蔽的房頂上張望缸剪。 院中可真熱鬧,春花似錦东亦、人聲如沸杏节。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拢锹。三九已至,卻和暖如春萄喳,著一層夾襖步出監(jiān)牢的瞬間卒稳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工他巨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留充坑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓染突,卻偏偏與公主長(zhǎng)得像捻爷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子份企,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359