SpringCloud-eureka高可用注冊(cè)中心

在分布式環(huán)境中茸俭,需要充分考慮發(fā)生故障的情況,在生產(chǎn)環(huán)境中必須要高可用的部署安皱。
上一篇文章中调鬓,eureka server是單一的服務(wù),所以不需要注冊(cè)自己练俐,但在集群環(huán)境中袖迎,需要eureka server相互注冊(cè)冕臭,所以下面2項(xiàng)要注意了

# 關(guān)閉自己注冊(cè)自己
eureka.client.register-with-eureka=false
# 不需要檢索服務(wù)
eureka.client.fetch-registry=false

在eureka server里增加2個(gè)配置文件:application-peer1腺晾,application-peer2如下
application-peer1.properties 建議使用域名,就要先修改hosts文件辜贵。

spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/

application-peer2.properties

spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/

請(qǐng)注意了悯蝉,這2個(gè)配置文件是相互注冊(cè)的,你中有我托慨,我中有你鼻由。
下面啟動(dòng)2個(gè)eureka server:

java -jar eureka-server.jar  --spring.profiles.active=peer1
java -jar eureka-server.jar  --spring.profiles.active=peer2

啟動(dòng)服務(wù),可以查看控臺(tái):http://peer1:1111/http://peer2:1112/

eureka.png

可以在registered-replicas看到都相互注冊(cè)了,available-replicas可用分片中可以看到相應(yīng)的節(jié)點(diǎn)蕉世,停止一個(gè)另一個(gè)還可以工作蔼紧,如下圖:
eureka2.png

關(guān)閉一個(gè)server后,如上圖有一個(gè)DOWN狠轻,若關(guān)閉保護(hù)模式奸例,一會(huì)這個(gè)服務(wù)將會(huì)被清除掉。
若available-replicas沒有相應(yīng)節(jié)點(diǎn)向楼,則是因?yàn)閑ureka.client.register-with-eureka/eureka.client.fetch-registry為false查吊,可以把a(bǔ)pplication.properties中改為true,或在peer配置文件中改為true湖蜕,默認(rèn)就為true逻卖。
上面即實(shí)現(xiàn)了注冊(cè)中心的高可用,下面提供服務(wù)給注冊(cè)中心昭抒。

跟上一章中構(gòu)建服務(wù)一樣评也,創(chuàng)建一個(gè)服務(wù)后打包生成jar,然后啟動(dòng)服務(wù)并注冊(cè)到所有注冊(cè)中心上戈鲁。

# 高可用
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer1:1111/eureka/

啟動(dòng)多個(gè)服務(wù)

java -jar eureka-client.jar  --server.port=8081
java -jar eureka-client.jar  --server.port=8082

啟動(dòng)后仇参,刷新peer1/peer2控制臺(tái),可以看到2個(gè)服務(wù)婆殿,也可以調(diào)用服務(wù)測試接口http://desktop-7brumlo:8081/hello

有了高可用注冊(cè)中心诈乒,也提供了服務(wù),接下來是消費(fèi)服務(wù)了婆芦。
下面通過ribbon消費(fèi)服務(wù)提供者怕磨,可通過日志查看ribbon的負(fù)載均衡狀態(tài)。
創(chuàng)建一個(gè)gradle工程消约,配置文件如下:


dependencyManagement {
    imports {
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Edgware.SR4'
    }
}
dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-actuator')
    compile 'org.slf4j:slf4j-api:1.7.14'
    compile('org.springframework.cloud:spring-cloud-starter-hystrix')
    compile('org.springframework.cloud:spring-cloud-starter-eureka')
    compile('org.springframework.cloud:spring-cloud-starter-ribbon')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

application.properties文件如下:

spring.application.name=ribbon-consumer
server.port=9000
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer1:1111/eureka/
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000

上面配置了熔斷的時(shí)間間隔為2000毫秒肠鲫。
在啟動(dòng)類上添加超時(shí)熔斷標(biāo)簽,如下:

@EnableCircuitBreaker  //超時(shí)熔斷
@EnableDiscoveryClient
@SpringBootApplication
public class CloudApplication {
    @Bean
    @LoadBalanced  //請(qǐng)求時(shí)擁有客戶端負(fù)載均衡的能力
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(CloudApplication.class, args);
    }
}

創(chuàng)建消費(fèi)controller或粮,如下:

@RestController
public class ConsumerController {

    @Autowired
    HelloService helloService;

    @GetMapping(value = "/ribbon-consumer")
    public String helloConsumer() {
        return helloService.hello();
    }

}

最后創(chuàng)建service导饲,調(diào)用要消費(fèi)的服務(wù),如下:

@Service
public class HelloService {
    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "helloFallback", commandKey = "helloKey")
    public String hello() {
        StringBuilder result = new StringBuilder();
        // GET
        result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class).getBody()).append("<br>");
        result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={1}", String.class, "didi").getBody()).append("<br>");
        return result.toString();

啟動(dòng)消費(fèi)服務(wù)后氯材,消費(fèi)服務(wù)http://localhost:9000/ribbon-consumer渣锦,可以看到以下日志

DynamicServerListLoadBalancer for client HELLO-SERVICE initialized: DynamicServerListLoadBalancer:
{NFLoadBalancer:name=HELLO-SERVICE,current list of Servers=[DESKTOP-7BRUMLO:8082, DESKTOP-7BRUMLO:8081],
Load balancer stats=Zone stats: {
defaultzone=[Zone:defaultzone;  Instance count:2;   
Active connections count: 0;    Circuit breaker tripped count: 0;
Active connections per server: 0.0;]

日志上可以看到ribbon客戶端維護(hù)的SERVICE的服務(wù)列表,就按此信息輪詢?cè)L問氢哮,以實(shí)現(xiàn)基于客戶端的負(fù)載均衡袋毙。
若停掉一個(gè)服務(wù),可以看到ribbon會(huì)啟動(dòng)熔斷機(jī)制冗尤,過一會(huì)后就可以正常訪問了听盖,所有請(qǐng)求落到另一個(gè)服務(wù)上胀溺;若2個(gè)服務(wù)都正常,可以觀察服務(wù)輸出日志是按輪詢方式輸出的皆看。
學(xué)習(xí)交流仓坞,請(qǐng)加群:64691032

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市腰吟,隨后出現(xiàn)的幾起案子扯躺,更是在濱河造成了極大的恐慌,老刑警劉巖蝎困,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件录语,死亡現(xiàn)場離奇詭異,居然都是意外死亡禾乘,警方通過查閱死者的電腦和手機(jī)澎埠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來始藕,“玉大人蒲稳,你說我怎么就攤上這事∥榕桑” “怎么了江耀?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诉植。 經(jīng)常有香客問我祥国,道長,這世上最難降的妖魔是什么晾腔? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任舌稀,我火速辦了婚禮,結(jié)果婚禮上灼擂,老公的妹妹穿的比我還像新娘壁查。我一直安慰自己,他們只是感情好剔应,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布睡腿。 她就那樣靜靜地躺著,像睡著了一般峻贮。 火紅的嫁衣襯著肌膚如雪席怪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天月洛,我揣著相機(jī)與錄音何恶,去河邊找鬼孽锥。 笑死嚼黔,一個(gè)胖子當(dāng)著我的面吹牛细层,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唬涧,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼疫赎,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了碎节?” 一聲冷哼從身側(cè)響起捧搞,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狮荔,沒想到半個(gè)月后胎撇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殖氏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年晚树,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雅采。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爵憎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出婚瓜,到底是詐尸還是另有隱情宝鼓,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布巴刻,位于F島的核電站愚铡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胡陪。R本人自食惡果不足惜茂附,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望督弓。 院中可真熱鬧营曼,春花似錦、人聲如沸愚隧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狂塘。三九已至录煤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荞胡,已是汗流浹背妈踊。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泪漂,地道東北人廊营。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓歪泳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親露筒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呐伞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)慎式,斷路器伶氢,智...
    卡卡羅2017閱讀 134,714評(píng)論 18 139
  • 轉(zhuǎn)載自:https://my.oschina.net/ahusky/blog/1824767 1. 大致介紹 Eu...
    Java小生閱讀 1,418評(píng)論 0 3
  • 當(dāng)初她素面朝天脾氣內(nèi)斂 你說她幼稚天真不夠妖艷 后來她煙酒夜店泛濫輕蔑 你嘆氣說想回到從前 你厭惡她經(jīng)歷甚少不夠成...
    回味著你給的余溫閱讀 542評(píng)論 0 0
  • “哈哈哈哈哈哈”突然一聲爽朗的笑傳到了我的耳朵里癣防,我心想:小劉劉又“出事”了!我為什么會(huì)這么想呢掌眠?因?yàn)橐话闱闆r...
    cy諾ooo閱讀 518評(píng)論 4 7
  • 1.《人與癌的PK賽》 A先生60歲劣砍,得到了肝癌,但他態(tài)度積極扇救、戰(zhàn)勝欲極強(qiáng)刑枝,他對(duì)病魔說:“混蛋!我怎么可以能輸給你...
    麥穗子_寒閱讀 368評(píng)論 0 0