1. 程式人生 > >springcloud之Ribbon負載均衡

springcloud之Ribbon負載均衡

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在呼叫時可能出現異常。