spring-cloud配置ribbon负载均衡

ribbon提供的负载均衡就是开箱即用的,简单的不能再简单了

  • 为了顺利演示此demo,你需要如下

需要提前配置eureka服务端,具体看 https://www.cnblogs.com/ye-hcj/p/10292944.html

需要提前配置eureka客户端,具体看 https://www.cnblogs.com/ye-hcj/p/10293048.html

目录结构

依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.0.5.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>test</groupId>
  12. <artifactId>test</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>demo</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. <version>2.0.5.RELEASE</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.cloud</groupId>
  29. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.cloud</groupId>
  33. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  34. <version>2.0.2.RELEASE</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-devtools</artifactId>
  44. <scope>runtime</scope>
  45. </dependency>
  46. <dependency>
  47. <groupId>javax.xml.bind</groupId>
  48. <artifactId>jaxb-api</artifactId>
  49. </dependency>
  50. <dependency>
  51. <groupId>com.sun.xml.bind</groupId>
  52. <artifactId>jaxb-impl</artifactId>
  53. <version>2.3.0</version>
  54. </dependency>
  55. <dependency>
  56. <groupId>org.glassfish.jaxb</groupId>
  57. <artifactId>jaxb-runtime</artifactId>
  58. <version>2.3.0</version>
  59. </dependency>
  60. <dependency>
  61. <groupId>javax.activation</groupId>
  62. <artifactId>activation</artifactId>
  63. <version>1.1.1</version>
  64. </dependency>
  65. </dependencies>
  66. <dependencyManagement>
  67. <dependencies>
  68. <dependency>
  69. <groupId>org.springframework.cloud</groupId>
  70. <artifactId>spring-cloud-dependencies</artifactId>
  71. <version>Finchley.SR1</version>
  72. <type>pom</type>
  73. <scope>import</scope>
  74. </dependency>
  75. </dependencies>
  76. </dependencyManagement>
  77. <build>
  78. <plugins>
  79. <plugin>
  80. <groupId>org.springframework.boot</groupId>
  81. <artifactId>spring-boot-maven-plugin</artifactId>
  82. </plugin>
  83. </plugins>
  84. </build>
  85. </project>

Application

  1. package test1.test;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  5. import org.springframework.cloud.netflix.ribbon.RibbonClient;
  6. import test1.test.Config.TestConfig;
  7. @RibbonClient(name = "stores", configuration = TestConfig.class)
  8. @EnableEurekaClient
  9. @SpringBootApplication
  10. public class DemoApplication {
  11. public static void main(String[] args) {
  12. SpringApplication.run(DemoApplication.class, args);
  13. }
  14. }

配置

  1. spring:
  2. application:
  3. name: eureka-ribbon-clustered
  4. server:
  5. port: 7000
  6. # -- Configure for Ribbon:
  7. stores:
  8. ribbon:
  9. eureka:
  10. enabled: false # Disable Default Ping
  11. listOfServers: localhost:8000,localhost:8001,localhost:8002,,localhost:8003
  12. ServerListRefreshInterval: 15000
  13. # -- Configure Discovery Client (Eureka Client).
  14. eureka:
  15. instance:
  16. appname: ribbion-service
  17. client:
  18. fetchRegistry: true
  19. serviceUrl:
  20. defaultZone: http://eureka1:9001/eureka

Config

  1. package test1.test.Config;
  2. import com.netflix.client.config.IClientConfig;
  3. import com.netflix.loadbalancer.IPing;
  4. import com.netflix.loadbalancer.IRule;
  5. import com.netflix.loadbalancer.PingUrl;
  6. import com.netflix.loadbalancer.WeightedResponseTimeRule;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.context.annotation.Bean;
  9. public class TestConfig {
  10. @Autowired
  11. private IClientConfig ribbonClientConfig;
  12. @Bean
  13. public IPing ribbonPing(IClientConfig config) {
  14. return new PingUrl();
  15. }
  16. @Bean
  17. public IRule ribbonRule(IClientConfig config) {
  18. return new WeightedResponseTimeRule();
  19. }
  20. }

Controller

  1. package test1.test.Controller;
  2. import java.util.List;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.cloud.client.ServiceInstance;
  5. import org.springframework.cloud.client.discovery.DiscoveryClient;
  6. import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestMethod;
  9. import org.springframework.web.bind.annotation.ResponseBody;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import org.springframework.web.client.RestTemplate;
  12. @RestController
  13. public class TestController {
  14. @Autowired
  15. private DiscoveryClient discoveryClient;
  16. @Autowired
  17. private LoadBalancerClient loadBalancer;
  18. @ResponseBody
  19. @RequestMapping(value = "/", method = RequestMethod.GET)
  20. public String home() {
  21. return "<a href='testCallAbcService'>/testCallAbcService</a>";
  22. }
  23. @ResponseBody
  24. @RequestMapping(value = "/testCallAbcService", method = RequestMethod.GET)
  25. public String showFirstService() {
  26. String serviceId = "EUREKA-CLIENT-CLUSTERED".toLowerCase();
  27. // (Need!!) eureka.client.fetchRegistry=true
  28. List<ServiceInstance> instances = this.discoveryClient.getInstances(serviceId);
  29. if (instances == null || instances.isEmpty()) {
  30. return "No instances for service: " + serviceId;
  31. }
  32. String html = "<h2>Instances for Service Id: " + serviceId + "</h2>";
  33. for (ServiceInstance serviceInstance : instances) {
  34. html += "<h3>Instance :" + serviceInstance.getUri() + "</h3>";
  35. }
  36. // Create a RestTemplate.
  37. RestTemplate restTemplate = new RestTemplate();
  38. html += "<br><h4>Call /hello of service: " + serviceId + "</h4>";
  39. try {
  40. // May be throw IllegalStateException (No instances available)
  41. ServiceInstance serviceInstance = this.loadBalancer.choose(serviceId);
  42. html += "<br>===> Load Balancer choose: " + serviceInstance.getUri();
  43. String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/loadBalancer";
  44. html += "<br>Make a Call: " + url;
  45. html += "<br>";
  46. String result = restTemplate.getForObject(url, String.class);
  47. html += "<br>Result: " + result;
  48. } catch (IllegalStateException e) {
  49. html += "<br>loadBalancer.choose ERROR: " + e.getMessage();
  50. e.printStackTrace();
  51. } catch (Exception e) {
  52. html += "<br>Other ERROR: " + e.getMessage();
  53. e.printStackTrace();
  54. }
  55. return html;
  56. }
  57. }

运行

  1. 先启动eureka服务端和客户端,再用spring-boot运行此程序
  2. 然后访问,即可看到其他同时注册的程序
  3. http://localhost:7000
  4. ribbon的负载均衡是它自己完成的,开箱即用

spring-cloud配置ribbon负载均衡的更多相关文章

  1. spring cloud: 关闭ribbon负载均衡

    spring cloud: 关闭ribbon负载均衡 1.eureka服务 2.2个user服务:7900/7901 3,movie服务 movie服务去请求 user的用户信息,而此时只想请求790 ...

  2. API网关spring cloud gateway和负载均衡框架ribbon实战

    通常我们如果有一个服务,会部署到多台服务器上,这些微服务如果都暴露给客户,是非常难以管理的,我们系统需要有一个唯一的出口,API网关是一个服务,是系统的唯一出口.API网关封装了系统内部的微服务,为客 ...

  3. spring cloud 之 客户端负载均衡 Ribbon

    一.负载均衡 负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意 ...

  4. 三、Spring Cloud之软负载均衡 Ribbon

    前言 上一节我们已经学习了Eureka 注册中心,其实我们也使用到了Ribbon ,只是当时我们没有细讲,所以我们现在一起来学习一下Ribbon. 什么是Ribbon 之前接触到的负载均衡都是硬负载均 ...

  5. SpringCloud学习笔记(8)----Spring Cloud Netflix之负载均衡-Ribbon的负载均衡的策略

    一. 内置 负载均衡策略的介绍的 IRule的实现类 2. 通过代码实现负载均衡 在第六节Riddom的使用的工程中,随机策略配置类 package com.wangx.cloud.springclo ...

  6. SpringCloud学习笔记(7)----Spring Cloud Netflix之负载均衡-Ribbon的深入理解

    1. 注解@LoadBalanced 作用:识别应用名称,并进行负载均衡. 2. 入口类:LoadBalancerAutoConfiguration 说明:类头上的注解可以知道Ribbon 实现的负载 ...

  7. 【Spring Cloud】客户端负载均衡组件——Ribbon(三)

    一.负载均衡 负载均衡技术是提高系统可用性.缓解网络压力和处理能力扩容的重要手段之一. 负载均衡可以分为服务器负载均衡和客户端负载均衡,服务器负载均衡由服务器实现,客户端只需正常访问:客户端负载均衡技 ...

  8. SpringCloud学习笔记(6)----Spring Cloud Netflix之负载均衡-Ribbon的使用

    1. 什么是负责均衡? 负载均衡,就是分发请求流量到不同的服务器. 负载均衡一般分为两种 1. 服务器端负载均衡(nginx) 2. 客户端负载均衡(Ribbon) 2. 服务提供者(spring-c ...

  9. Spring Cloud 2-Ribbon 客户端负载均衡(二)

    Spring Cloud Eureka  1.Hello-Service服务端配置 pom.xml application.yml 启动两个service 2.Ribbon客户端配置 pom.xml ...

随机推荐

  1. 0 与 “0" 与 '\0' 与 '0'相互之间的区别

    1. '\0'和‘0’都是字符,对应的ASCII值分别是0和48. 2. 0表示一个数字.也可以表示ASCII值,对应字符'\0'. 3. “0”表示字符串,第一个字符是'0'.

  2. Neutron的防火墙原理

    确切的说这是fwaas,即防火墙即是服务. 防火墙与安全组区别防火墙一般放在网关上,用来隔离子网之间的访问.因此,防火墙即服务也是在网络节点上(具体说来是在路由器命名空间中)来实现. 安全组的对象是虚 ...

  3. java基本数据类型、修饰符、运算符

    数据类型: 基本数据类型 整数类型  byte,8位  short,16位  int,32位i  long,64位 浮点类型  float,单精度,32位  double,双精度,64位 布尔类型   ...

  4. (二)java环境搭建

    Java运行环境的搭建: 什么是JRE,什么是JDK? JRE:(java运行环境)包括jvm(java虚拟机)和java运行的核心类库,如果只是运行java程序,只需安装JRE JDK:(java开 ...

  5. (七)js函数一

    1.函数概念:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. 语法:fuction hello(){         code...     } a)手动驱动: eg: hello(); ...

  6. C++常量const

    常量折叠概念 常量折叠表面上的效果和宏替换是一样的,只是“效果上是一样的”,而两者真正的区别在于,宏是字符常量,在预编译宏替换完成后,该宏名字会消失,所有对宏的引用已经全部被替换为它所对应的值,编译器 ...

  7. CTF学习资料总结

    网络攻防大作业学习方向思路 一直对CTF比赛有参与的兴趣,但由于课程比较多,一直没有足够的时间系统的去了解与训练.所以我想利用接下来的几周时间对CTF比赛经行练习.并找到自己所擅长或感兴趣的方向深入研 ...

  8. Hibernate HQL查询(1)

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段           String hql ="from Users";   ...

  9. RESTful 服务示例

    WCF服务轻量级服务,可供JS调用 返回值格式:XML.Json 工程结构: 示例代码: using System; using System.Collections.Generic; using S ...

  10. 转载.怎样在Quartus II中转化HDL文件为bsf文件?

    步骤1 新建或打开Quartus II工程,用QII自带文本编辑器打开HDL文件. 图1 用QII自带的文本编辑器打开HDL文件 步骤2 选择File>Create / Update>Cr ...