摘要:此為的結構圖上篇已注冊了,的服務,接下來用,實現負載均衡和的簡單客戶端,讓消費者調用服務。是發布的云中間層服務開源項目,其主要功能是提供客戶側軟件負載均衡算法,將的中間層服務連接在一起。對選定的負載均衡策略機上重試機制。
??????????上篇已經搭建好基礎demo,接下來繼續構建項目并對spring cloud組件介紹描述。
Eureka:實際上在整個過程中維護者每個服務的生命周期。每一個服務都要被注冊到Eureka服務器上,這里被注冊到Eureka的服務又稱為Client。Eureka通過心跳來確定服務是否正常。Eureka只做請求轉發。同時Eureka是支持集群的呦!!!
Zuul:類似于網關,反向代理。為外部請求提供統一入口。
Ribbon/Feign:可以理解為調用服務的客戶端。
Hystrix:斷路器,服務調用通常是深層的,一個底層服務通常為多個上層服務提供服務,那么如果底層服務失敗則會造成大面積失敗,Hystrix就是就調用失敗后觸發定義好的處理方法,從而更友好的解決出錯。也是微服務的容錯機制。
此為eureka的結構圖
上篇已注冊了user,movie的服務,接下來用Ribbo,feign實現負載均衡和web service的簡單客戶端,讓movie消費者調用user服務。
Ribbon:
Ribbon 是 Netflix 發布的云中間層服務開源項目,其主要功能是提供客戶側軟件負載均衡算法,將 Netflix 的中間層服務連接在一起。Eureka 是一個 RESTful 服務,用來定位運行在 AWS 域(Region)中的中間層服務。本文介紹 Eureka 和 Ribbon 的集成,附帶 Ribbon 自定義負載均衡算法示例。
Feign:
在Spring Cloud Netflix棧中,各個微服務都是以HTTP接口的形式暴露自身服務的,因此在調用遠程服務時就必須使用HTTP客戶端。我們可以使用JDK原生的URLConnection、Apache的Http Client、Netty的異步HTTP Client, Spring的RestTemplate。Feign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,非常快捷簡便。
這是movie服務的目錄結構按此新建java文件
pom加入新依賴
org.springframework.cloud spring-cloud-starter-feign
Ribbon的負載均衡可以通過注解調用
也可以自定義configration 負載均衡的算法,但是不能和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 | 過濾掉那些因為一直連接失敗的被標記為circuit tripped的后端server,并過濾掉那些高并發的的后端server(active connections 超過配置的閾值) | 使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status里記錄的各個server的運行狀態 * RandomRule | 隨機選擇一個server * BestAvailabl eRule | 選擇一個最小的并發請求的server | 逐個考察Server,如果Server被tripped了,則忽略,在選擇其中 * RoundRobinRule | roundRobin方式輪詢選擇 | 輪詢index,選擇index對應位置的server * WeightedResponseTimeRule | 根據響應時間分配一個weight,響應時間越長,weight越小,被選中的可能性越低。 | 一 個后臺線程定期的從status里面讀取評價響應時間,為每個server計算一個weight。Weight的計算也比較簡單responsetime 減去每個server自己平均的responsetime是server的權重。當剛開始運行,沒有形成statas時,使用roubine策略選擇 server。 * RetryRule | 對選定的負載均衡策略機上重試機制。 | 在一個配置時間段內當選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server * ZoneAvoidanceRule | 復合判斷server所在區域的性能和server的可用性選擇server | 使 用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個server,前一個判斷判定一個 zone的運行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過濾掉連接數過多的 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的負載是否實現
接下來 ,配置feign,知識feign的config
@Configuration public class FeignConfig { @Bean public Contract feignContract(){ return new feign.Contract.Default(); } }
定義feign的客戶端接口,這里調用user 微服務的接口,feign支持springMvc注解,但要生明請求方法和參數
@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); } }
分別啟動eureka,user和movie微服務
訪問movie的測試接口,成功返回數據
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67706.html
摘要:本系列網絡資料資料來源于網絡,相關學習微服務與微服務架構定義理解單一應用程序劃分為一組小的服務,每個服務有自己的進程。 本系列(java-study-springcloud-網絡資料)資料來源于網絡,springcloud相關學習 1、微服務與微服務架構 定義:https://martinfowler.com/arti... showImg(https://segmentfault.c...
摘要:實現配置和注冊中心最近,阿里開源的比較火,可以和和共用,對升級到非常的方便。只需要添加依賴,使用配置注冊中心地址即可。配置不生效,沒有使用注解刷新配置分清注冊中心和配置中心是兩個概念,需要配置兩個地址學會看源碼,看維基。 Springcloud-nacos實現配置和注冊中心 最近,阿里開源的nacos比較火,可以和springcloud和dubbo共用,對dubbo升級到springc...
摘要:調用百度實現圖像識別使用渲染導出的制作的超級炫酷的三維模型一個代碼庫本人本人瀏覽器調試及所有錯誤代碼整合千峰超級好用的各種開發自學文檔這是它對應的學習視頻使用教程詳細虛擬機安裝系統詳解版網易開源鏡像站在線數據互轉使 1.Java調用百度API實現圖像識別 2.使用Three.js渲染Sketchup導出的dae 3.three.js制作的超級炫酷的三維模型 4.three.js - 一...
摘要:調用百度實現圖像識別使用渲染導出的制作的超級炫酷的三維模型一個代碼庫本人本人瀏覽器調試及所有錯誤代碼整合千峰超級好用的各種開發自學文檔這是它對應的學習視頻使用教程詳細虛擬機安裝系統詳解版網易開源鏡像站在線數據互轉使 1.Java調用百度API實現圖像識別 2.使用Three.js渲染Sketchup導出的dae 3.three.js制作的超級炫酷的三維模型 4.three.js - 一...
閱讀 2003·2021-11-23 10:08
閱讀 2336·2021-11-22 15:25
閱讀 3275·2021-11-11 16:55
閱讀 771·2021-11-04 16:05
閱讀 2603·2021-09-10 10:51
閱讀 712·2019-08-29 15:38
閱讀 1583·2019-08-29 14:11
閱讀 3487·2019-08-29 12:42