1. 7 Eureka注冊中心
1.7.1 遠(yuǎn)程調(diào)用的問題
- 地址信息獲取:服務(wù)消費者如何獲取服務(wù)提供者的地址信息(不能每次都寫死): URL:http://localhost:8081/user/"+order.getUserId()
- 多選一:如果有多個服務(wù)提供者,消費者如何進行選擇
- 監(jiān)測健康狀態(tài):消費者如何獲知提供者的健康狀態(tài)
1.7.2 eureka原理
-
地址信息獲?。?br> 1)服務(wù)提供者啟動時,向Eureka注冊自己的信息
2)Eureka保存這些信息
3)消費者根據(jù)服務(wù)名向Erueka拉去提供者信息 -
多選一:
1)使用負(fù)載均衡技術(shù),從多個服務(wù)列表中,選擇一個 -
監(jiān)測健康狀態(tài)
1)服務(wù)提供者每隔30s會向Eureka發(fā)送自己的心跳數(shù)據(jù),即是否正常工作
2)如果不工作了會從保存的服務(wù)列表中剔除
3)消費者根據(jù)最新的服務(wù)列表能夠或者服務(wù)者健康狀況
1.7.3 搭建EurekaServer
1)創(chuàng)建項目:引入spring-cloud-starter-netflix-eureka-server的依賴
//服務(wù)端依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2)編寫啟動類,添加@EnableEurekaServer注解
@EnableEurekaServer //自動裝配Eureka注解
@SpringBootApplication //SpringBoot啟動類注解
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
3)添加application.yml文件,并編寫如下配置
server:
port: 10086 #注冊的端口
spring:
application:
name: eurekaserver #服務(wù)注冊名字
eureka:
client:
service-url: #服務(wù)注冊訪問地址
defaultZone: http://127.0.0.1:10086/eureka/
1.7.4 服務(wù)注冊:注冊user-service
- 引入依賴:在user-service項目引入spring-cloud-starter-netflix-eureka-client的依賴
//客戶端依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 添加配置:在application.yml文件,編寫下面的配置
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
- 多服務(wù)注冊(同一個服務(wù),但是多端口,模擬多服務(wù)架構(gòu))
1)如果直接復(fù)制一個服務(wù),會發(fā)生沖突,故需要更改下VM選項:-Dserver.port=8082

1.7.4 服務(wù)注冊:注冊order-service
order-service雖然是消費者,但與user-service一樣都是eureka的client端,同樣可以實現(xiàn)服務(wù)注冊:
- 引入依賴:在order-service項目引入spring-cloud-starter-netflix-eureka-client的依賴
//客戶端依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 添加配置:在application.yml文件,編寫下面的配置
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
1.7.6 order-service完成服務(wù)拉?。軌蜃灾x擇服務(wù))
服務(wù)拉取是基于服務(wù)名稱獲取服務(wù)列表,然后在對服務(wù)列表做負(fù)載均衡
- 修改orderService中的代碼,變更url路徑
String url = "http://userservice/user/" + order.getUserId();
- 在orderService啟動類中,添加的resttemplate遠(yuǎn)程調(diào)用上添加負(fù)載均衡注解;主要為了標(biāo)記該調(diào)用發(fā)起的請求會被ribbon攔截并操作
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
1.7.7 總結(jié)


1)order-serice發(fā)起請求:http://userservice/use/1
2)獲取url中服務(wù)的id(userservice)
3)在Eureka中拉去userservice
4)返回服務(wù)列表(8081/8082)
5)服務(wù)負(fù)載均衡策略:IRule
6)選擇某個服務(wù):8081
7)修改原來的url,發(fā)起請求
8)請求服務(wù)8081
1.8.2 負(fù)載均衡策略

- 代碼方式:在order-service中的OrderApplication類中,定義一個新的IRule:
@Bean
public IRulerandomRule(){
return new RandomRule();
}
- 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改規(guī)則:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#負(fù)載均衡規(guī)則
1.8.4 饑餓加載
Ribbon默認(rèn)是采用懶加載,即第一次訪問時才會去創(chuàng)建LoadBalanceClient,請求時間會很長。
而饑餓加載則會在項目啟動時創(chuàng)建,降低第一次訪問的耗時,通過下面配置開啟饑餓加載:文章來源:http://www.zghlxwxcb.cn/news/detail-641408.html
ribbon:
eager-load:
enabled: true # 開啟饑餓加載
clients:userservice # 指定對userservice這個服務(wù)饑餓加載
1.8.5 總結(jié)
- Ribbon負(fù)載均衡規(guī)則
1)規(guī)則接口是IRule
2)默認(rèn)實現(xiàn)是ZoneAvoidanceRule,根據(jù)zone選擇服務(wù)列表,然后輪詢 - 負(fù)載均衡自定義方式
1)代碼方式:配置靈活,但修改時需要重新打包發(fā)布
2)配置方式:直觀,方便,無需重新打包發(fā)布,但是無法做全局配置 - 饑餓加載
1)開啟饑餓加載
2)指定饑餓加載的微服務(wù)名稱
參考文獻
1)黑馬程序員SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系統(tǒng)詳解springcloud微服務(wù)技術(shù)棧課文章來源地址http://www.zghlxwxcb.cn/news/detail-641408.html
到了這里,關(guān)于基于SpringCloud的微服務(wù)架構(gòu)學(xué)習(xí)筆記(2)注冊中心Eureka和負(fù)載均衡Ribbon的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!