學習spring cloud記錄4-Eureka
前言
Eureka是一個註冊中心,在以前的記錄中,兩個服務之間的呼叫需要使用硬編碼的方式,即把ip和埠號等地址寫死在程式中,使用Eureka可解決此問題,但不知能解決這個問題,還有其他的作用。
Eureka的作用
1.消費者該如何獲取服務提供者的資訊?
服務提供者啟動時,向Eureka註冊自己的資訊
eureka儲存這些資訊
消費者根據服務名稱向eureka拉取提供者資訊
2.如果有多個服務提供者,消費者該如何選擇?
服務消費者利用負載均衡演算法,從服務列表中選擇一個
3.消費者如何感知伺服器供著健康狀態?
服務提供者會每隔30s向Eureka註冊中心傳送心跳請求,報告健康狀態
eureka會更新記錄伺服器列表資訊,心跳不正常的進行剔除
消費者就可以拉取到最新的資訊
搭建Eureka服務
建立專案
引入依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>3.1.1</version> </dependency>
編寫main函式
package ptiv.sinoam.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class EurekaApplication {public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
編寫配置檔案(application.yml)
server:
port: 9003
spring:
application:
name: eureka-server
eureka:
client:
service-url: # eureka徐婭註冊自己的資訊
defaultZone: http://127.0.0.1:9003/eureka
啟動eureka
發現報錯Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
這是因為該專案在父級pom中引入了jdbc,springboot啟動時會自動裝配,這個時候發現沒有配置資料庫所以會報錯,在main方法中新增以下程式碼即可:
@EnableEurekaServer @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
即可啟動成功,開啟頁面可以看到
服務註冊
將demo-user註冊到eureka
引入依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.1.1</version> </dependency>
編寫配置檔案
新增以下程式碼即可
eureka:
client:
service-url: # eureka徐婭註冊自己的資訊
defaultZone: http://127.0.0.1:9003/eureka
使用同樣方式將demo-order註冊到eureka中,啟動後會看到註冊的服務列表
如果同一個服務啟動多個會怎樣
複製一個user服務,然後通過-Dserver.port=9004修改埠
啟動後發現user多了服務
Eureka服務發現
在消費者中修改寫死的url,用服務名代替ip和port
//呼叫demo-user裡面的請求 // String url = "http://localhost:9001/demouser/user/test"; //用服務名進行替換 String url = "http://demo-user/demouser/user/test";
然後新增負載均衡
找到restTemplate添加註解
/** * 建立RestTemplate並注入Spring容器 * @return */ @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }
重啟order專案,呼叫介面後
不斷重新整理後,可以在兩個user專案的日誌中發現都有走,說明實現了負載均衡
結束
1.搭建Eureka
引入server依賴
新增@EnableEurekaServer註解
在配置檔案中配置eureka地址
2.服務註冊
引入client註解
在配置檔案中配置eureka地址
3.服務發現
引入client註解
在配置檔案中配置eureka地址
在restTemplate新增@LoadBalanced實現負載均衡