負載均衡---ribbon
Ribbon:提供雲端負載均衡,有多種負載均衡策略可供選擇,可配合服務發現和斷路器使用。
上一篇簡單講解了eureka的使用,這一篇文章基於上一篇的基礎上,講一下springcloud的另一個重要的元件ribbon。
這篇文章需要新建三個工程,service(8762),service(8763),service-ribbon(8764),三個服務分別向eureka-server註冊中心註冊,本文的服務使用的註冊中心都是本人建立的測試eureka--http://eureka.dalaoyang.cn。
首先新建一個service(8762),括號內的8762是專案的埠號,加入eureka依賴,pom檔案如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dalaoyang</groupId>
<artifactId>springcloud_service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springcloud_service</name>
<description>springcloud_service</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置檔案
##埠號
server.port=8762
##服務名稱
spring.application.name=service
##註冊中心地址
eureka.client.service-url.defaultZone=http://eureka.dalaoyang.cn/eureka/
啟動類使用註解@EnableEurekaClient向註冊中心註冊,程式碼如下:
package com.dalaoyang;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@EnableEurekaClient
public class SpringcloudServiceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudServiceApplication.class, args);
}
@Value("${server.port}")
String port;
@Value("${spring.application.name}")
String serviceName;
@GetMapping("/")
public String index(){
return "serviceName=" + serviceName + "-------port=" + port;
}
}
到這裡service(8762)建立完成,然後複製一個專案,埠號改為8763作為service(8763)。
然後新建專案service-ribbon(8764),pom檔案加入ribbon依賴,pom完整程式碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dalaoyang</groupId>
<artifactId>springcloud_ribbon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springcloud_ribbon</name>
<description>springcloud_ribbon</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置檔案如下:
##埠號
server.port=8764
##服務名稱
spring.application.name=service_ribbon
##註冊中心地址
eureka.client.service-url.defaultZone=http://eureka.dalaoyang.cn/eureka/
由於只是一個簡單demo,所有我將java程式碼都寫在了啟動類裡面,解釋一下,@LoadBalanced放在RestTemplate上面,表明RestTemplate開啟負載均衡。程式碼如下:
package com.dalaoyang;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
@RestController
public class SpringcloudRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudRibbonApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@Value("${server.port}")
String port;
@Value("${spring.application.name}")
String serviceName;
@GetMapping("/")
public String index(){
return restTemplate().getForObject("http://service/",String.class);
}
}
分別啟動service(8762),service(8763),service-ribbon(8764)三個工程。
先檢視http://eureka.dalaoyang.cn/,可以看到三個例項註冊成功。如下圖:
多次訪問http://localhost:8764/,可以看到頁面交替顯示
可以看到負載均衡已經做到了。
完整專案流程如下圖:
原始碼下載 :大老楊碼雲
相關文章
- Ribbon實現負載均衡負載
- Spring Cloud Ribbon負載均衡SpringCloud負載
- 【SpringCloud】之Ribbon負載均衡SpringGCCloud負載
- Ribbon負載均衡 (原始碼分析)負載原始碼
- 微服務負載均衡器 Ribbon微服務負載
- (4)什麼是Ribbon負載均衡負載
- 客服端負載均衡:Spring Cloud Ribbon負載SpringCloud
- SpringCloud客戶端負載均衡——RibbonSpringGCCloud客戶端負載
- Ribbon負載均衡策略與自定義配置負載
- Ribbon 支援的9大負載均衡策略負載
- SpringCloud 客戶端負載均衡:RibbonSpringGCCloud客戶端負載
- Ribbon - 幾種自定義負載均衡策略負載
- SpringCloud入門(四)Ribbon負載均衡SpringGCCloud負載
- Spring Cloud Ribbon 客戶端負載均衡SpringCloud客戶端負載
- Spring Cloud:自定義 Ribbon 負載均衡策略SpringCloud負載
- Spring cloud(3)-負載均衡(Feign,Ribbon)SpringCloud負載
- SpringCloud Fegin結合Ribbon實現負載均衡SpringGCCloud負載
- Ribbon提供的負載均衡演算法IRule(四)負載演算法
- (20)SpringCloud-Ribbon自定義負載均衡策略SpringGCCloud負載
- Spring Cloud之負載均衡元件Ribbon原理分析SpringCloud負載元件
- SpringCloud學習筆記:負載均衡Ribbon(3)SpringGCCloud筆記負載
- ③SpringCloud 實戰:使用 Ribbon 客戶端負載均衡SpringGCCloud客戶端負載
- SpringCloud 服務負載均衡和呼叫 Ribbon、OpenFeignSpringGCCloud負載
- 微服務(三) Eureka註冊中心和Ribbon負載均衡微服務負載
- 【SpringCloud】(六):Ribbon實現客戶端負載均衡SpringGCCloud客戶端負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(上)SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(下)SpringCloud負載
- Spring Cloud負載均衡神器——Ribbon簡介與基本使用SpringCloud負載
- 微服務Spring Cloud17_負載均衡Ribbon6微服務SpringCloud負載
- 負載均衡負載
- SpringCloud系列之客戶端負載均衡Netflix RibbonSpringGCCloud客戶端負載
- 微服務架構 | 4.1 基於 Ribbon 的負載均衡詳解微服務架構負載
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- SpringCloud微服務中使用RestTemplate+Ribbon實現負載均衡(實現方法+實現原理+替換負載均衡策略)SpringGCCloud微服務REST負載
- spring cloud 上雲的情況下,Ribbon 客戶端負載均衡 與 ALB 服務端負載均衡的選擇SpringCloud客戶端負載服務端
- Spring cloud客戶端負載均衡與ribbon的設計思路SpringCloud客戶端負載
- Spring Cloud入門教程-Ribbon實現客戶端負載均衡SpringCloud客戶端負載