當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
第六章 SpringCloud之Ribbon负载均衡
生活随笔
收集整理的這篇文章主要介紹了
第六章 SpringCloud之Ribbon负载均衡
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
###################使用默認的負載均衡(輪詢)#############################
1、pom.xml
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.test</groupId><artifactId>eureka-client-ribbon</artifactId><version>0.0.1-SNAPSHOT</version><name>eureka-client-ribbon</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>Greenwich.SR1</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</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> View Code2、application.yml
server:port: 8665 user:userServicePath: http://localhost:8663/user/spring:application:name: eureka-client-ribbon eureka:instance:hostname: localhostprefer-ip-address: trueinstance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}client:serviceUrl:defaultZone: http://${eureka.instance.hostname}:8661/eureka3、對RestTemplate添加注解
package com.test.eurekaclientribbon;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.client.RestTemplate;@SpringBootApplication @EnableEurekaClient public class EurekaClientRibbonApplication {@Bean@LoadBalanced //使restTemplate具備負載均衡的作用public RestTemplate restTemplate(){return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(EurekaClientRibbonApplication.class, args);}}4、使用restTemplate對象遠程調用服務
package com.test.eurekaclientribbon.controller;import com.test.eurekaclientribbon.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;/*** Ribbon使用步驟:* 全局配置* 1、添加依賴* 2、配置application.yml文件* 3、對啟動類中的RestTemplate添加@LoadBalanced注解,使得RestTemplate對象具備負載均衡能力* 4、請求路徑為:被調用方的地址,但必須將被調用方的ip地址改為virtualIp* 例如 restTemplate.getForObject("http://eureka-client-user/user/"+id, User.class);* 被調用方URL:http://192.168.137.1:8663/user/* 現為:http://eureka-client-user/user/*/ @RestController public class MovieController {@Autowiredprivate RestTemplate restTemplate;@Value("${user.userServicePath}")private String userServicePath;/* @Autowiredprivate LoadBalancerClient loadBalancerClient;*/@GetMapping("/movie/{id}")public User findById(@PathVariable Long id) {//請用虛擬ipreturn restTemplate.getForObject("http://eureka-client-user/user/"+id, User.class);}/*** 配置單一的方法進行輪詢* @return*//* @GetMapping("/test")public String test() {//請用虛擬ipServiceInstance serviceInstance =loadBalancerClient.choose("eureka-client-user");System.out.println(serviceInstance.getHost()+":"+serviceInstance.getPort());return "1";}*/ }5、訪問
http://localhost:8661/ #查看eureka http://192.168.137.1:8663/user/2 #確保自己調用可以訪問 http://192.168.137.1:8665/movie/4 #遠程調用測試?
###################配置對單一的方法進行輪詢(使用loadBalancerClient)########################
1、針對第一個步驟中的(4),進行修改
package com.test.eurekaclientribbon.controller;import com.test.eurekaclientribbon.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;/*** Ribbon使用步驟:* 全局配置* 1、添加依賴* 2、配置application.yml文件* 3、對啟動類中的RestTemplate添加@LoadBalanced注解,使得RestTemplate對象具備負載均衡能力* 4、請求路徑為:被調用方的地址,但必須將被調用方的ip地址改為virtualIp* 例如 restTemplate.getForObject("http://eureka-client-user/user/"+id, User.class);* 被調用方URL:http://192.168.137.1:8663/user/* 現為:http://eureka-client-user/user/*/ @RestController public class MovieController {/* @Autowiredprivate RestTemplate restTemplate; */@Value("${user.userServicePath}")private String userServicePath;@Autowiredprivate LoadBalancerClient loadBalancerClient;/* @GetMapping("/movie/{id}")public User findById(@PathVariable Long id) {//請用虛擬ipreturn restTemplate.getForObject("http://eureka-client-user/user/"+id, User.class);}*//*** 配置單一的方法進行輪詢* @return*/@GetMapping("/test")public String test() {//請用虛擬ipServiceInstance serviceInstance =loadBalancerClient.choose("eureka-client-user");System.out.println(serviceInstance.getHost()+":"+serviceInstance.getPort());return "1";} }?
###################全局修改負載均衡方式########################
1、針對(2)application.yml文件添加下面配置
server:port: 8665 user:userServicePath: http://localhost:8663/user/ spring:application:name: eureka-client-ribbon eureka:instance:hostname: localhostprefer-ip-address: trueinstance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}client:serviceUrl:defaultZone: http://${eureka.instance.hostname}:8661/eureka eureka-client-user: #遠程服務虛擬主機名ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #隨機方式#可以通過IRule類查看負載均衡方式#RoundRobinRule 輪詢#RandomRule 隨機?
###################編寫Configuration文件指定負載均衡方式########################
?1、創建一個配置類
package com.test.eurekaclientribbon.config; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class RibbonConfig {@Beanpublic IRule ribbonRule() {return new RandomRule();} }2、在啟動類上添加注解
package com.test.eurekaclientribbon;import com.test.eurekaclientribbon.config.RibbonConfig; 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.cloud.netflix.ribbon.RibbonClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate;@SpringBootApplication @EnableEurekaClient @RibbonClient(name = "eureka-client-user",configuration = RibbonConfig.class) //表示eureka-client-user主機使用這個規則 public class EurekaClientRibbonApplication {@Bean@LoadBalanced //使restTemplate具備負載均衡的作用public RestTemplate restTemplate(){return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(EurekaClientRibbonApplication.class, args);}}?
轉載于:https://www.cnblogs.com/ywjfx/p/10549550.html
總結
以上是生活随笔為你收集整理的第六章 SpringCloud之Ribbon负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7部署NFS
- 下一篇: 学生信息链表,建立,插入,删除,遍历,查