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"; } }