springcloud之Ribbon負載均衡
阿新 • • 發佈:2018-11-03
Ribbon是Netflix釋出的負載均衡器,它有助於控制HTTP和TCP控制端的行為。為Ribbon配置服務提供地址列表後,Ribbon就可基於某種負載均衡演算法,自動的幫助服務消費者去請求。Ribbon預設為我們提供了很多的負載均衡演算法,例如輪詢、隨機等,也可以實現自定義的負載均衡演算法。和Eureka配合實現如下架構:
新建一個服務消費者,融合ribbon,引入如下依賴:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> </dependencies>
在此之前,先要啟動eureka-server 工程;啟動service-hi工程,它的埠為8762;將service-hi的配置檔案的埠改為8763,並啟動。
修改配置檔案如下:
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8764 spring: application: name: service-ribbon
為restTemplete方法新增@LoadBalanced註解,可開啟該方法的負載均衡功能:
@Bean @LoadBalanced RestTemplate restTemplate() {return new RestTemplate(); }
在service 服務消費者程式碼中使用如下程式碼可進行呼叫:
restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
通過之前注入ioc容器的restTemplate來消費service-hi服務的“/hi”介面,在這裡我們直接用的程式名替代了具體的url地址,在ribbon中它會根據服務名來選擇具體的服務例項,根據服務例項在請求的時候會用具體的url替換掉服務名。
需要注意的是:虛擬主機名(例如SERVICE-HI)不能使用“_”之類的字元,否則Ribbon在呼叫時可能出現異常。