Spring-Cloud-Eureka-服務發(fā)現(xiàn)與注冊

一性置、簡介

? ? ? ? 1.概念:

????????????????在微服務架構下定铜,一個服務自動定位 到被調用的服務的過程稱為服務發(fā)現(xiàn)。

? ? ? ? 2.目的:

? ??????????????我們約定提供服務的一方霉翔,即RPC的服務端,稱為服務提供者
????????????????調用或說使用服務的一方苞笨,即RPC的客戶端债朵,稱為服務消費者

????????????????1. 服務消費者上線時,能夠發(fā)現(xiàn)合適的服務提供者
????????????????2. 當某個服務提供者上線時瀑凝,消費者能夠獲悉服務的存在
????????????????3. 服務提供者實例發(fā)生變動不可用時(如故障 或者重新發(fā)布而不可用)葱弟,消費者得到通知,停止對其調用
????????????????4. 新增服務實例可以被消費者使用猜丹,跟第一條不同的是芝加,這里是擴展操作,即為一個已有服務增加實例(如3臺服務器變成4臺服務器)

? ? ? ? 3.環(huán)節(jié):

? ? ? ? ? ? ? ? 1.服務注冊射窒,提供者將服務公之于眾藏杖,讓服務消費者可以知曉服務的狀態(tài)
? ? ? ? ? ? ? ? 2.服務下線,提供者聲明服務不再可用脉顿,后續(xù)不再調用該服務
? ? ? ? ? ? ? ? 3.服務查詢蝌麸,消費者可以查詢到所需調用的服務的地址、端口等等信息艾疟,以用于調用
? ? ? ? ? ? ? ? 4.服務健康檢查来吩,需要知曉服務提供者當前是否可用,如果不可用則不再對外提供服務
? ? ? ? ? ? ? ? 5.服務通知蔽莱,當服務狀態(tài)發(fā)生變化時確保消費者知曉弟疆,則需要通知消費者

? ? ? ? 4.過程:

????????????????有服務注冊表組件作為中間人,然后服務提供者啟動時會將服務注冊到服務注冊表中盗冷,當服務調用者需要調用服務時則從服務注冊表中查找相應的服務并調用怠苔。這就是服務發(fā)現(xiàn)的過程。具體步驟如下:
? ??????????????①服務提供者啟動時仪糖,將服務注冊到服務注冊表
????????????????②服務消費者啟動時拉取服務列表
????????????????③服務消費者需要調用時從服務注冊表中選擇合適的服務并調用
????????????????④服務注冊表檢測服務提供者的健康狀況并更新服務列表
????????????????⑤當服務健康狀態(tài)發(fā)生改變時通知客戶端更新服務列表

服務發(fā)現(xiàn)步驟

二柑司、Eureka


Eureka

? ? ? ? 1.Eureka簡介:

? ? ? ? ? ? ? ? 1.Eureka是NetFlix開源的一款服務發(fā)現(xiàn)組件。Spring Cloud對其進行了封裝锅劝。
? ? ? ? ? ? ? ? 2.Eureka基于 REST(Representational State Transfer) 協(xié)議通信
? ? ? ? ? ? ? ? 3.Eureka不存儲任何信息攒驰,而是使用客戶端心跳推送的方式來做健康檢測,也就是Eureka Client會在指定間隔時間內發(fā)送一段信息給服務端故爵,服務端據(jù)此確認服務的健康性

? ? ? ? 2.主要組件:

? ? ? ? ? ? ? ? 1.Eureka-Server玻粪,獨立部署的系統(tǒng),負責管理服務信息(接收服務注冊、檢測服務是否存活)奶段,支持配置成集群饥瓷,保證高可用
? ? ? ? ? ? ? ? 2.Eureka-Client,集成在服務中(服務提供與消費者都有集成)痹籍,與Eureka-Server通信呢铆,執(zhí)行服務注冊、獲取服務列表等

三蹲缠、Eureka-Server搭建

? ? ? ? 1.步驟:
? ?????????????①IDEA中執(zhí)行以下操作:File>New Project>Spring Initalizr進入如下界面棺克,點擊 Next

? ? ? ????????? ②填寫Maven坐標GAV、項目描述等线定,Next

? ? ? ? ? ? ? ? ③選擇相應的依賴娜谊,這里很簡單,選擇Eureka-Server即可斤讥,Next

? ? ? ? ? ? ? ? ④選擇相應的依賴纱皆,這里很簡單,選擇Eureka-Server即可芭商,Next

? ? ? ? ? ? ? ? ⑤選擇項目存放位置后派草,完成項目,在當前窗口打開項目铛楣,此時Maven會下 載項目依賴近迁,稍等片刻后項目即創(chuàng)建完成。

? ? ? ? 2. 搭建項目:

? ??????????????生成的項目簸州,是標準的Spring Cloud項目鉴竭,與其他Spring Boot項目pom.xml文件有不同的地方:
①:依賴管理部分導入了SpringCloud的依賴管理BOM,可以直接引用Spring-Cloud各個 組件而不需要添加版本號
<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>
②:引用了Spring-Cloud的組件岸浑, 這里引入了Eureka-Server
<dependency>
????<groupId>org.springframework.cloud</groupId>
????<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
?</dependency>

????????3.添加注解:

? ??????????????項目雖然引入了Eureka-Server的包搏存,但還未啟用該功能蜒犯,我們通過給Application添加注解來啟動Eureka-Server功能逻淌。
@SpringBootApplication
@EnableEurekaServer//啟動EurekaServer功能
public class EurekaserverApplication {
????public static void main(String[] args) {
????????SpringApplication.run(EurekaserverApplication.class, args);
????}
}

? ? ? ? 4.添加配置:

? ??????????????給Eureka-Server添加一些必要的配置。Spring-Boot的外化配置特性羔味,配置文件統(tǒng)一放在resources/application.properties中兵钮。配置如下:
#項目信息
spring.application.name=eurekaserver
server.port=9600
#單機模式配置
#服務器名
eureka.instance.hostname=localhost
#是否注冊到Eureka-Server,Eureka-Server本身也可以是Client,所以有此選項,這里默認關閉
eureka.client.register--with-eureka=false
#是否拉取服務列表,同上因為是Server所以不需要拉取列表
eureka.client.fetch-registry=false
#client的服務地址,server的地址是自己
eureka.client.service-url.defaultZone=
http://${eureka.instance.hostname}:${server.port}/eureka/

????????5.啟動并查看項目:

? ??????????????運行Application舌界,服務啟動日志沒有報錯即表示啟動成功掘譬。 此時訪問 localhost:9600可以看見Eureka-Server的Web界面

成功界面

四、Eureka Client搭建

? ? ? ? 1.簡介:Eureka-Client其實是包含在項目中的呻拌,分成服務提供者和服務消費者兩個角色葱轩。我們假設這里有個電影評分服務,顯然電影網(wǎng)站(movie)就是服務消費者,評分服務(rating)就是服務提供者了靴拱。需要分別創(chuàng)建movie項目和rating項目都要包含eureka-client垃喊,并通過配置指向同一個eureka-server。

? ? ? ? 2.搭建rating服務(服務提供方):
? ? ? ? ? ? ? ? ①創(chuàng)建項目:參考Eureka-Server搭建
? ? ? ? ? ? ? ? ②添加配置 :
? ??????????????????????#應用信息
? ??????????????????????spring.application.name=rating
? ??????????????????????server.port=9501
? ??????????????????????#Eureka配置,主要是Eureka-server的地址
? ??????????????????????eureka.client.service-url.defaultZone=http://localhost:9600/eureka
? ? ? ? ? ? ? ? ③添加評分功能 :
? ??????????????????????@RestController
????????????????????????public class RatingController {
????????????????????????????@RequestMapping("rate")
????????????????????????????public int rate(String movieName){
????????????????????????????????????return movieName.length();
????????????????????????????}
????????????????????????}
? ? ? ? ? ? ? ? ④啟動&訪問驗證 :和Eureka-Server搭建的第3步添加注解一樣

? ? ? ? 3.搭建movie項目(服務消費方):
? ??????????????①創(chuàng)建項目:參考Eureka-Server搭建
????????????????②添加配置:
? ??????????????????????#應用信息
????????????????????????spring.application.name=movie
? ? ? ? ? ? ? ? ? ? ? ? server.port=9502
????????????????????????#Eureka配置,主要是Eureka-server的地址
????????????????????????eureka.client.service-url.defaultZone=http://localhost:9600/eureka
????????????????③添加調用評分服務的代碼
(1)先配置一個 RestTemplate用于調用遠程服務:
@Configuration
public class AppConfig {
????@Bean
????public RestTemplate restTemplate(){
????????return new RestTemplate();
????}
}
(2)評分服務的代碼:
@RestController
public class MovieController {
????@Autowired
????private RestTemplate restTemplate;
????@Autowired
????private EurekaClient discoveryClient;
????@RequestMapping("movie")
????public String showMovie(String movieName, ModelMap modelMap){
????????InstanceInfo instance = discoveryClient.getNextServerFromEureka("rating",false);
????????String serviceUrl= instance.getHomePageUrl();
????????System.out.println(serviceUrl);
????????int credit = restTemplate.getForObject(serviceUrl+"/rate?movieName="+movieName,Integer.class);
????????return "電影【"+movieName+"】的評分為"+credit;
? ? }
}
????????????????④啟動&訪問驗證:和Eureka-Server搭建的第3步添加注解一樣

? ? ? ? 4.運行結果

運行結果
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末袜炕,一起剝皮案震驚了整個濱河市本谜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偎窘,老刑警劉巖乌助,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陌知,居然都是意外死亡他托,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門仆葡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赏参,“玉大人,你說我怎么就攤上這事沿盅“崖ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵嗡呼,是天一觀的道長纸俭。 經(jīng)常有香客問我,道長南窗,這世上最難降的妖魔是什么揍很? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮万伤,結果婚禮上窒悔,老公的妹妹穿的比我還像新娘。我一直安慰自己敌买,他們只是感情好简珠,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虹钮,像睡著了一般聋庵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芙粱,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天祭玉,我揣著相機與錄音,去河邊找鬼春畔。 笑死脱货,一個胖子當著我的面吹牛岛都,可吹牛的內容都是我干的。 我是一名探鬼主播振峻,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼臼疫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扣孟?” 一聲冷哼從身側響起烫堤,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哈打,沒想到半個月后塔逃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡料仗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年湾盗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立轧。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡格粪,死狀恐怖,靈堂內的尸體忽然破棺而出氛改,到底是詐尸還是另有隱情帐萎,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布胜卤,位于F島的核電站疆导,受9級特大地震影響,放射性物質發(fā)生泄漏葛躏。R本人自食惡果不足惜澈段,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舰攒。 院中可真熱鬧败富,春花似錦、人聲如沸摩窃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猾愿。三九已至鹦聪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒂秘,已是汗流浹背椎麦。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留材彪,地道東北人观挎。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像段化,于是被迫代替她去往敵國和親嘁捷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350