摘要:此為的結(jié)構(gòu)圖上篇已注冊了,的服務(wù),接下來用,實(shí)現(xiàn)負(fù)載均衡和的簡單客戶端,讓消費(fèi)者調(diào)用服務(wù)。是發(fā)布的云中間層服務(wù)開源項(xiàng)目,其主要功能是提供客戶側(cè)軟件負(fù)載均衡算法,將的中間層服務(wù)連接在一起。對選定的負(fù)載均衡策略機(jī)上重試機(jī)制。
??????????上篇已經(jīng)搭建好基礎(chǔ)demo,接下來繼續(xù)構(gòu)建項(xiàng)目并對spring cloud組件介紹描述。
Eureka:實(shí)際上在整個(gè)過程中維護(hù)者每個(gè)服務(wù)的生命周期。每一個(gè)服務(wù)都要被注冊到Eureka服務(wù)器上,這里被注冊到Eureka的服務(wù)又稱為Client。Eureka通過心跳來確定服務(wù)是否正常。Eureka只做請求轉(zhuǎn)發(fā)。同時(shí)Eureka是支持集群的呦!!!
Zuul:類似于網(wǎng)關(guān),反向代理。為外部請求提供統(tǒng)一入口。
Ribbon/Feign:可以理解為調(diào)用服務(wù)的客戶端。
Hystrix:斷路器,服務(wù)調(diào)用通常是深層的,一個(gè)底層服務(wù)通常為多個(gè)上層服務(wù)提供服務(wù),那么如果底層服務(wù)失敗則會造成大面積失敗,Hystrix就是就調(diào)用失敗后觸發(fā)定義好的處理方法,從而更友好的解決出錯(cuò)。也是微服務(wù)的容錯(cuò)機(jī)制。
此為eureka的結(jié)構(gòu)圖
上篇已注冊了user,movie的服務(wù),接下來用Ribbo,feign實(shí)現(xiàn)負(fù)載均衡和web service的簡單客戶端,讓movie消費(fèi)者調(diào)用user服務(wù)。
Ribbon:
Ribbon 是 Netflix 發(fā)布的云中間層服務(wù)開源項(xiàng)目,其主要功能是提供客戶側(cè)軟件負(fù)載均衡算法,將 Netflix 的中間層服務(wù)連接在一起。Eureka 是一個(gè) RESTful 服務(wù),用來定位運(yùn)行在 AWS 域(Region)中的中間層服務(wù)。本文介紹 Eureka 和 Ribbon 的集成,附帶 Ribbon 自定義負(fù)載均衡算法示例。
Feign:
在Spring Cloud Netflix棧中,各個(gè)微服務(wù)都是以HTTP接口的形式暴露自身服務(wù)的,因此在調(diào)用遠(yuǎn)程服務(wù)時(shí)就必須使用HTTP客戶端。我們可以使用JDK原生的URLConnection、Apache的Http Client、Netty的異步HTTP Client, Spring的RestTemplate。Feign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠(yuǎn)程服務(wù)時(shí)能與調(diào)用本地方法一樣的編碼體驗(yàn),非常快捷簡便。
這是movie服務(wù)的目錄結(jié)構(gòu)按此新建java文件
pom加入新依賴
org.springframework.cloud spring-cloud-starter-feign
Ribbon的負(fù)載均衡可以通過注解調(diào)用
也可以自定義configration 負(fù)載均衡的算法,但是不能和Application同目錄
public class RibbonConfiguration { @Autowired private IClientConfig ribbonClientConfig; /** * Our IPing is a PingUrl, which will ping a URL to check the status of each * server.provider has, as you’ll recall, a method mapped to the / path; * that means that Ribbon will get an HTTP 200 response when it pings a * running provider server. * * server list defined in application.yml :listOfServers: localhost:8000, * localhost:8002,localhost:8003 * */ @Bean public IPing ribbonPing(IClientConfig config) { // ping url will try to access http://microservice-provider/provider/ to // see if reponse code is 200 . check PingUrl.isAlive() // param /provider/ is the context-path of provider service return new PingUrl(false, "/provider/"); } /** * The IRule we set up, the AvailabilityFilteringRule, will use Ribbon’s * built-in circuit breaker functionality to filter out any servers in an * “open-circuit” state: if a ping fails to connect to a given server, or if * it gets a read failure for the server, Ribbon will consider that server * “dead” until it begins to respond normally. * * AvailabilityFilteringRule | 過濾掉那些因?yàn)橐恢边B接失敗的被標(biāo)記為circuit tripped的后端server,并過濾掉那些高并發(fā)的的后端server(active connections 超過配置的閾值) | 使用一個(gè)AvailabilityPredicate來包含過濾server的邏輯,其實(shí)就就是檢查status里記錄的各個(gè)server的運(yùn)行狀態(tài) * RandomRule | 隨機(jī)選擇一個(gè)server * BestAvailabl eRule | 選擇一個(gè)最小的并發(fā)請求的server | 逐個(gè)考察Server,如果Server被tripped了,則忽略,在選擇其中 * RoundRobinRule | roundRobin方式輪詢選擇 | 輪詢index,選擇index對應(yīng)位置的server * WeightedResponseTimeRule | 根據(jù)響應(yīng)時(shí)間分配一個(gè)weight,響應(yīng)時(shí)間越長,weight越小,被選中的可能性越低。 | 一 個(gè)后臺線程定期的從status里面讀取評價(jià)響應(yīng)時(shí)間,為每個(gè)server計(jì)算一個(gè)weight。Weight的計(jì)算也比較簡單responsetime 減去每個(gè)server自己平均的responsetime是server的權(quán)重。當(dāng)剛開始運(yùn)行,沒有形成statas時(shí),使用roubine策略選擇 server。 * RetryRule | 對選定的負(fù)載均衡策略機(jī)上重試機(jī)制。 | 在一個(gè)配置時(shí)間段內(nèi)當(dāng)選擇server不成功,則一直嘗試使用subRule的方式選擇一個(gè)可用的server * ZoneAvoidanceRule | 復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇server | 使 用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個(gè)server,前一個(gè)判斷判定一個(gè) zone的運(yùn)行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過濾掉連接數(shù)過多的 Server。 * @param config * @return */ @Bean public IRule ribbonRule(IClientConfig config) { // return new AvailabilityFilteringRule(); return new RandomRule();// // return new BestAvailableRule(); // return new RoundRobinRule();//輪詢 // return new WeightedResponseTimeRule(); // return new RetryRule(); // return new ZoneAvoidanceRule(); } }
可以在controller輸出看ribbon的負(fù)載是否實(shí)現(xiàn)
接下來 ,配置feign,知識feign的config
@Configuration public class FeignConfig { @Bean public Contract feignContract(){ return new feign.Contract.Default(); } }
定義feign的客戶端接口,這里調(diào)用user 微服務(wù)的接口,feign支持springMvc注解,但要生明請求方法和參數(shù)
@FeignClient(name="userprovider",configuration = FeignClient.class) public interface UserFeignClient { @RequestMapping (value = "/user/{id}",method = RequestMethod.GET) public User find(@PathVariable("id") int id); }
然后在application里添加feign注解
@SpringBootApplication @EnableEurekaClient @EnableFeignClients public class MicroserviceSimpleConsumerMovieApplication { public static void main(String[] args) { // @Bean // public RestTemplate restTemplate(){ // return new RestTemplate(); // } SpringApplication.run(MicroserviceSimpleConsumerMovieApplication.class, args); } }
最后controller測試feign的接口
@RestController public class NewsController { @Autowired RestTemplate restTemplate; @Autowired LoadBalancerClient loadBalancerClient; @Autowired UserFeignClient userFeignClient; @RequestMapping("/newsUser/{id}") public User find(@PathVariable int id){ return restTemplate.getForObject("http://localhost:8080/user/"+id,User.class); } @GetMapping("/test") public String test(){ ServiceInstance serviceInstance=loadBalancerClient.choose("userprovider"); String s=serviceInstance.getHost()+serviceInstance.getPort()+serviceInstance.getServiceId(); return s; } @GetMapping("/movie/{id}") public User findmovie(@PathVariable int id){ return userFeignClient.find(id); } }
分別啟動(dòng)eureka,user和movie微服務(wù)
訪問movie的測試接口,成功返回?cái)?shù)據(jù)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67706.html
摘要:本系列網(wǎng)絡(luò)資料資料來源于網(wǎng)絡(luò),相關(guān)學(xué)習(xí)微服務(wù)與微服務(wù)架構(gòu)定義理解單一應(yīng)用程序劃分為一組小的服務(wù),每個(gè)服務(wù)有自己的進(jìn)程。 本系列(java-study-springcloud-網(wǎng)絡(luò)資料)資料來源于網(wǎng)絡(luò),springcloud相關(guān)學(xué)習(xí) 1、微服務(wù)與微服務(wù)架構(gòu) 定義:https://martinfowler.com/arti... showImg(https://segmentfault.c...
摘要:實(shí)現(xiàn)配置和注冊中心最近,阿里開源的比較火,可以和和共用,對升級到非常的方便。只需要添加依賴,使用配置注冊中心地址即可。配置不生效,沒有使用注解刷新配置分清注冊中心和配置中心是兩個(gè)概念,需要配置兩個(gè)地址學(xué)會看源碼,看維基。 Springcloud-nacos實(shí)現(xiàn)配置和注冊中心 最近,阿里開源的nacos比較火,可以和springcloud和dubbo共用,對dubbo升級到springc...
摘要:調(diào)用百度實(shí)現(xiàn)圖像識別使用渲染導(dǎo)出的制作的超級炫酷的三維模型一個(gè)代碼庫本人本人瀏覽器調(diào)試及所有錯(cuò)誤代碼整合千峰超級好用的各種開發(fā)自學(xué)文檔這是它對應(yīng)的學(xué)習(xí)視頻使用教程詳細(xì)虛擬機(jī)安裝系統(tǒng)詳解版網(wǎng)易開源鏡像站在線數(shù)據(jù)互轉(zhuǎn)使 1.Java調(diào)用百度API實(shí)現(xiàn)圖像識別 2.使用Three.js渲染Sketchup導(dǎo)出的dae 3.three.js制作的超級炫酷的三維模型 4.three.js - 一...
摘要:調(diào)用百度實(shí)現(xiàn)圖像識別使用渲染導(dǎo)出的制作的超級炫酷的三維模型一個(gè)代碼庫本人本人瀏覽器調(diào)試及所有錯(cuò)誤代碼整合千峰超級好用的各種開發(fā)自學(xué)文檔這是它對應(yīng)的學(xué)習(xí)視頻使用教程詳細(xì)虛擬機(jī)安裝系統(tǒng)詳解版網(wǎng)易開源鏡像站在線數(shù)據(jù)互轉(zhuǎn)使 1.Java調(diào)用百度API實(shí)現(xiàn)圖像識別 2.使用Three.js渲染Sketchup導(dǎo)出的dae 3.three.js制作的超級炫酷的三維模型 4.three.js - 一...
閱讀 2006·2021-11-23 10:08
閱讀 2340·2021-11-22 15:25
閱讀 3277·2021-11-11 16:55
閱讀 776·2021-11-04 16:05
閱讀 2610·2021-09-10 10:51
閱讀 716·2019-08-29 15:38
閱讀 1589·2019-08-29 14:11
閱讀 3489·2019-08-29 12:42