天天看點

SpringCloud:Ribbon負載均衡

在消費者服務上使用Ribbon

1.導入Ribbon依賴

<!--導入Eureka和Ribbon-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
           

2.修改配置

修改application.yaml檔案。這裡是為了連接配接Eureka叢集

#Eureka配置
eureka:
  client:
    register-with-eureka: false #不向Eureka注冊自己
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #預設連接配接的Server的Url
           

3.在ConfigBean中為getRestTemplate方法添加注解

添加@LoadBalanced注解,啟用Ribbon負載均衡功能

@Configuration
public class ConfigBean {   //@Configuration -->相當于 spring applicationContext.xml
    配置負載均衡實作RestTemplate。将這個類注冊到Bean,交給Spring托管
    @Bean
    @LoadBalanced   //Ribbon
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}
           

4.修改DeptController中連接配接常量

@RestController
public class DeptConsumerController {
    //消費者不應該有Service層
    //RestTemplate...供我們調用就可以了。需要先将他注冊進Spring
    //(url,實體:Map,Class<T> responseType)
    @Autowired
    private RestTemplate restTemplate;  //提供多種便捷通路Http服務的方法,簡單的Restful服務模闆

    //常用請求是localhost:8001/xxx,我們将這個字首定義成常量友善使用
    // 使用Ribbon實作時,這裡應該是個變量,故注釋掉,用服務名通路
    //private static final String REST_URL_PREFIX = "http://localhost:8001";
    private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
           

5.為主啟動類添加@EnableEurekaClient注解

添加該注解,以使其通路Eureka叢集,在其中找服務

package com.jlu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

//Eureka和Ribbon整合後,用戶端可以直接調用,不用關心IP位址和端口号
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_80.class,args);
    }
}

           

開始測試

由于Ribbon的原理是:連接配接Eureka注冊中心叢集,在叢集中擷取可以使用的微服務。

之前我們隻有一個8001提供者服務,現在我們建立另外兩個,形成小叢集

0.建立兩個資料庫

建立DB02和DB03資料庫,類似之前的DB01,這裡不再贅述。

1.建立子產品

建立普通maven項目,取名為springcloud-provider-dept-8002和springcloud-provider-dept-8002

修改其内容,使其成為新提供者

注意:這三個提供者子產品的spring.application.name必須一緻!才能形成叢集

spring:
  application:
    name: springcloud-provider-dept
           

2.啟動進行測試

繼續閱讀