springcloud學習-eureka服務消費者(Ribbon)
接上篇博文,可以啓動2個服務提供者,分別是端口號8010和8011,接下來開始創建服務消費者。
1 右鍵工程,進入“New Module”視圖,如下:
2 選擇jdk版本,一般情況默認自己的jdk即可。
3 點擊“Next”,輸入對應的工程名稱(eurekaribbon),選擇對應的工程構建方式,這裏選擇“Gradle Project”,如果gradle不是太熟悉,可以自行百度或者參考後續的博文。
4 點擊“Next”,除了選擇對應Cloud Discovery,並勾選Eureka Server 外,選擇左側的Cloud Routing,並勾選Ribbon
5 點擊“Next”,然後Finish即可,這時idea已經幫助你完成一些基本的操作。展開對應的eurekaribbon module,找到resources目錄,添加application.yml,工程文件目錄:
application.yml配置如下:
server: port: 8180 sessionTimeout: 15 tomcat: max-threads: 800 uri-encoding: UTF-8 spring: application: name: serviceRibbon eureka: client: serviceUrl: defaultZone: http://root:melo@localhost:8001/eureka/ EUREKASERVERPROVIDER: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
此處的配置說明:
spring.application.name爲serviceRibbon;
對應的服務提供者的serviceId即EUREKASERVERPROVIDER,對應的ribbon的選擇策略NFLoadBalancerRuleClassName爲:
負載均衡策略主要如下:
AvailabilityFilteringRule:過濾掉因爲一直連接失敗的被標記爲“電路跳閘”的後端server,且過濾掉高併發的的後端server(可連接數超過配置的閾值)
RandomRule:隨機選擇一個後端server
BestAvailabl:選擇一個最小的併發請求的後端server,逐個考察server,如果server被標記爲“電路跳閘”了,則忽略
RoundRobinRule:roundRobin方式輪詢選擇, 輪詢index,選擇index對應的後端server
WeightedResponseTimeRule:根據響應時間分配一個權重,響應時間越長,權重越小,被選中的可能性越低
RetryRule:對選定的負載均衡策略機上重試機制,在一個配置時間段內當選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server
這裏我們選擇RandomRule作爲負載策略。
對應build配置文件如下:
比上兩篇博文上的gradle文件多出此依賴。
6 對應的主程序類:
package com.example.eurekaribbon; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class EurekaribbonApplication { public static void main(String[] args) { SpringApplication.run(EurekaribbonApplication.class, args); } }
此處新增的是@EnableDiscoveryClient註釋,表示對應的服務發現。
RestTemplateConfig類
package com.example.eurekaribbon.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class RestTemplateConfig { @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } }
HelloService類
package com.example.eurekaribbon.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @Service public class HelloService { @Autowired RestTemplate restTemplate; @Autowired LoadBalancerClient loadBalancerClient; public String sayHello(String name){ ServiceInstance serviceInstance = loadBalancerClient.choose("EUREKASERVERPROVIDER"); System.out.println(serviceInstance.getHost() + ":" + serviceInstance.getPort()+"---------------------------"); return restTemplate.getForObject("http://EUREKASERVERPROVIDER/name/"+name,String.class); } }
HelloController類
package com.example.eurekaribbon.web; import com.example.eurekaribbon.service.HelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @Autowired HelloService helloService; @RequestMapping("/{who}") public String sayHello(@PathVariable String who){ return helloService.sayHello(who); } }
7 啓動主程序類,此時看到對應的註冊中心如下:
8 驗證,在瀏覽器輸入:http://localhost:8010/test,查看後臺日誌:
多次刷新可以查看更多日誌。
以上是個人學習過程,如有錯誤,歡迎指正,謝謝大家!