zoukankan      html  css  js  c++  java
  • SpringCloud Ribbon 客户端负载均衡

    简介:是一个基于Http、tcp协议的客户端负载均衡工具,当浏览器向后端发送请求时,选取Eureka Server 中的可用服务提供者列表,根据负载均衡策略,选取一个可用服务发送请求

    负载均衡策略:轮询(RoundRobin)、随机(Radom)、请求数最少(BestAvailable)

    代码示例如下:

    注:此示例基于 springboot1.5.10

    1、eureka server 此模块内容在此省略

    2、服务提供者模块

    添加依赖:只需添加必要的依赖,无需添加特定依赖

    <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-client</artifactId>
                <version>1.4.3.RELEASE</version>
            </dependency>
    

    application配置:

    server:
      port: 7904 #程序启动端口,也是Tomcat端口
    spring:
      application:
        name: provider-user #应用别名
    
    eureka:
      client:
        service-url:
          defaultZone: http://user:123@localhost:10000/eureka
      instance:
          instance-id: ${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}
          prefer-ip-address: true #是否以ip显示host
    

    启动类:

    @SpringBootApplication
    @EnableEurekaClient //启用eureka客户端
    public class providerApplication
    {
        public static void main( String[] args )
        {
            SpringApplication.run(providerApplication.class,args);
            System.out.println("provider-user start-up success");
        }
    }
    

    3、服务消费者模块

    添加依赖:与服务提供者相同

    application配置

    server:
      port: 8900 #程序启动端口,也是Tomcat端口
    spring:
      application:
        name: customer-order-ribbon #应用别名
    
    eureka:
      client:
        service-url:
          defaultZone: http://user:123@localhost:10000/eureka
      instance:
        instance-id: ${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}
        prefer-ip-address: true
    #      eureka.instance.preferIpAddress=true
    
    #eureka.instance=instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}
    #user:
    #  url: http://localhost:7900/user/
    

    配置类

    @Configuration
    public class TestRibbonConfig {
        @Autowired
        IClientConfig iClientConfig;
    
        @Bean
        public IRule testRibbon(IClientConfig iClientConfig){
            return new RandomRule();
        }
    
    }
    

     启动类

    @SpringBootApplication
    @EnableEurekaClient
    @RibbonClient(name="PROVIDER-USER",configuration = TestRibbonConfig.class) //启用ribbon,并对 PROVIDER-USER 进行负载均衡
    public class customerApplication
    {
        @Bean
        @LoadBalanced
        public RestTemplate getTemp(){
            return new RestTemplate();
        }
        public static void main( String[] args )
        {
            SpringApplication.run(customerApplication.class,args);
            System.out.println("customer start-up success");
        }
    }
    

    Controller

    @RestController
    public class CustomeController {
        @Autowired
        private EurekaClient eurekaClient;
    
        @Autowired
        private RestTemplate restTemplate;//springboot提供的用于访问rest接口的对象
    
        @Autowired
        private LoadBalancerClient loadBalancerClient;
    
        @GetMapping("/testRibbon")
        public String testRibbon(){
            ServiceInstance choose = loadBalancerClient.choose("PROVIDER-USER");
            System.err.println("testRibbon:serviceId"+choose.getServiceId()+",host:"+choose.getHost()+",port:"+choose
                    .getPort());
            return "testRibbon:"+choose.getPort();
        }
    }
    

     注:如果需要访问其他微服务模块,可使用rest接口

     

  • 相关阅读:
    Aboat join
    ajax 弹出层
    如何使用 BindingSource 绑定 ListBox,同时解决绑定 List<T> 后修改数据源不能同时刷新界面显示的问题
    Javascript 弹出层
    vs 2008 90 天 试用 破解
    c#的as类型转换详细理解,欢迎园友拍砖。
    Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
    纠结了一天多的问题arithmetic overflow error converting expression to data type datetime
    关于开发Office2003AddIn问题
    为什么Scrum不行。。
  • 原文地址:https://www.cnblogs.com/jincheng81/p/12572505.html
Copyright © 2011-2022 走看看