使用配置文件自定义Ribbon配置

1、application.yml——Ribbon配置文件

debug: false
spring:
  application:
    name: mcc-ribbon-properties
  cloud:
    consul:
      discovery: 
        instanceId: ${spring.application.name}:${server.port}
      host: localhost
      port: 8500
      config:
        enabled: true #false禁用Consul配置,默认true
        format: YAML    # 表示consul上面文件的格式 有四种 YAML PROPERTIES KEY-VALUE FILES
        #data-key: configuration    #表示consul上面的KEY值(或者说文件的名字) 默认是data
        data-key: data    #表示consul上面的KEY值(或者说文件的名字) 默认是data
        #prefix设置配置值的基本文件夹
        #defaultContext设置所有应用程序使用的文件夹名称
        #profileSeparator设置用于使用配置文件在属性源中分隔配置文件名称的分隔符的值 
server:
  port: 8804
  
  
#预加载配置,默认为懒加载
ribbon:
  eager-load:
    enabled: true
    clients: mima-cloud-producer,mima-cloud-producer2
#这里使用服务提供者的instanceName
mima-cloud-producer:
  ribbon:
    # 代表Ribbon使用的负载均衡策略
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    # 每台服务器最多重试次数,但是首次调用不包括在内, Max number of retries on the same server (excluding the first try)
    MaxAutoRetries: 1
    # 最多重试多少台服务器,Max number of next servers to retry (excluding the first server)
    MaxAutoRetriesNextServer: 1
    # 无论是请求超时或者socket read timeout都进行重试,Whether all operations can be retried for this client
    OkToRetryOnAllOperations: true
    # Interval to refresh the server list from the source
    ServerListRefreshInterval: 2000
    # Connect timeout used by Apache HttpClient
    ConnectTimeout: 3000
    # Read timeout used by Apache HttpClient
    ReadTimeout: 3000
mima-cloud-producer2:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

 

2、RibbonConsumerApplication——Ribbon启动类

package com.mimaxueyuan.consumer.robbin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumerApplication {

    @Bean
    @LoadBalanced // 需要使用负载均衡,必须与Bean一同使用
    public RestTemplate balanceRestTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
}

 

3、RibbonController——Ribbon测试类

package com.mimaxueyuan.consumer.robbin.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class RibbonController {

    @Autowired
    private RestTemplate balanceRestTemplate;

    // 以下注入负载均衡客户端LoadBalancerClient是一个接口,下面只有一个RibbonLoadBalancerClient实现类
    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Autowired
    private RibbonLoadBalancerClient ribbonLoadBalancerClient;

    // 基于properties的ribbon使用展示
    @GetMapping("/ribbon/get1")
    public String eureka() {
        ServiceInstance instance = loadBalancerClient.choose("mima-cloud-producer");
        System.out.println("host:" + instance.getHost() + ",port:" + instance.getPort() + ",serviceId=" + instance.getServiceId() + ",uri=" + instance.getUri());
        return "/ribbon/get1's demo, please to see console output";
    }

    // 基于properties的ribbon使用展示
    @GetMapping("/ribbon/get2")
    public String get2() {
        ServiceInstance instance = loadBalancerClient.choose("mima-cloud-producer2");
        System.out.println("host:" + instance.getHost() + ",port:" + instance.getPort() + ",serviceId=" + instance.getServiceId() + ",uri=" + instance.getUri());
        return "/ribbon/get2's demo, please to see console output";
    }

}

 

posted on 2018-12-13 19:16  Ruthless  阅读(8656)  评论(0编辑  收藏  举报