為了解決硬編碼的遺留問題,需要服務注冊與發現機制來解決這些問題。
公司主營業務:成都網站建設、成都網站設計、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯推出大峪免費做網站回饋大家。
服務注冊與發現機制的作用:記錄每個服務提供者的網絡信息,向服務消費者提供所需服務網絡信息。
一、服務發現組件
服務提供者、服務消費者、服務發現組件三者之間的關系:
1、每一個為服務啟動的時候都會將自己的網絡信息注冊到服務發現組件中,服務發現組件將這些信息進行存儲;
2、服務消費者從服務發現組件中查詢服務提供者的網絡信息,并使用這些信息對服務提供者進行訪問;
3、每個微服務與服務發現組件之間通過存在通信機制,當服務發現組件長時間無法與某微服務進行聯系,服務發現組件會將該實例注銷;
4、微服務的網絡信息進行變更時,會重新注冊到服務發現組建中,該服務的調用方無需修改提供者的信息。
服務發現組件基本功能:
1、服務注冊表:這是服務發現組件的核心。用來記錄各個微服務的信息,包括微服務的名稱、IP、端口等。服務注冊表提供查詢API和管理API,查詢API用于查詢可用的微服務實例,管理API用于服務的注冊與注銷;
2、服務注冊與發現:
????服務注冊:微服務啟動時將信息注冊到服務發現組件中的過程;
????服務發現:查詢可用的微服務列表及其網絡信息的機制
3、服務檢查:使用一定的機制檢測服務的有效性,如果檢測到某微服務已經掛掉會自動將該實例注銷。
二、Eureka
Eureka是springcloud提供的一種服務發現組件。
1、Eureka Server 和?Eureka client
Eureka包含兩個組件:Eureka Server 和?Eureka client,二者關系如下:
Eureka Server提供了服務發現與注冊的機制,微服務啟動時會向Eureka Server注冊自己的信息,Eureka Server會將這些信息進行存儲。
微服務啟動后,會在指定間隔(默認30秒)向Eureka Server發送心跳,表明服務正在運行;
如果Eureka Server長時間(默認90秒)沒有收到來自某微服務的心跳,Eureka Server就會注銷這個實例;
Eureka client緩存了服務注冊表的信息。微服務無需每次都向Eureka Server查詢服務狀態,減輕了Eureka Server的壓力。同時,如果Eureka Server掛掉,微服務依然可以從緩存中獲取到服務提供者的網絡信息并完成調用。
三、編寫Eureka Server
項目結構如下:
添加pom依賴:
??? org.springframework.cloud ???spring-cloud-starter-eureka-server
啟動類添加注解:
@SpringBootApplication @EnableEurekaServer??//表明自己是一個Eureka?Server public?class?EurakaApplication?{ ???public?static?void?main(String[]?args)?{ ??????SpringApplication.run(EurakaApplication.class,?args); ???} }
yml文件中添加配置:
server: ??port:?8761 eureka: ??client: ????register-with-eureka:?false?#表示是否將自己注冊到Eureka?Server中,默認為true。由于本項目就是一個Eureka?Server,故此處設為false ????fetch-registry:?false?#表示是否從其他Eureka?Server中獲取信息,由于此處為單點Eureka?Server,設為false即可 ????service-url: ??????default-zone:??#?設置與Eureka?Server的交互地址,查詢與注冊服務都需要用到該地址,多個地址可以使用","分隔
此時啟動項目并且訪問http://localhost:8716/,得到如下頁面,此時還沒有任何微服務注冊進來。
四、將微服務注冊到Eureka Server中
還以user項目為例:
pom依賴:
??? org.springframework.cloud ???spring-cloud-starter-eureka-server
yml文件:
spring: ??application: ????name:?user?#?指定注冊到Eureka?Server中的應用名字 eureka: ??client: ????service-url: ??????default-zone:?http://localhost:8761/eureka/ ??instance: ????prefer-ip-address:?true?#是否將自己的IP注冊到Eureka?Server中,如果不配置或設置為false,會將微服務所在的操作系統的hostname注冊到Eureka?Server
啟動類添加注解:
@SpringBootApplication @EnableEurekaClient?//聲明自己是一個注冊服務 public?class?UserApplication?{ ???public?static?void?main(String[]?args)?{ ??????SpringApplication.run(UserApplication.class,?args); ???} }
此時啟動項目并且再次訪問:http://localhost:8716/,得到如下頁面:
此時用戶微服務已經注冊到Eureka Server中。