700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Ribbon+LoadBalance

Ribbon+LoadBalance

时间:2020-08-06 10:15:05

相关推荐

Ribbon+LoadBalance

Ribbon+LoadBalance

ribbon是一套客户端的负载均衡工具。主要提供客户端的负载均衡算法和服务调用。当调用服务时ribbon会自动的帮助你基于某种规则(轮询、随机)去链接机器调用服务。我们也可以使用ribbon实现自定义的负载均衡算法。Ribbon是客户端的负载均衡,Nginx是服务器的负载均衡。

pom依赖

eureka自带了ribbon依赖,所以只需加入eureka客户端依赖。

Ribbon要结合RestTemplate实现远程调用

/*** 配置RestTemplate* 使用@LoadBalanced 默认轮询的负载均衡策略*/@Configurationpublic class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}}

@RestControllerpublic class OrderController {@Resourceprivate RestTemplate restTemplate;public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";@GetMapping("/login/{admin}/{password}")public Result<Users> orderLogin(@PathVariable String admin,@PathVariable String password){String login_url = PAYMENT_URL+"/sent/user/login/"+admin+"/"+password;//使用restTemplate实现远程调用服务Result<Users> result = restTemplate.getForObject(login_url,Result.class);return result;}}

自定义ribbon负载均衡算法

自定义的ribbon负载规则不能放在@ComponentScan所扫描的包下以及子包下,也就是说不能放在主启动类所在的包内,要与主启动类所在包并列。利用IRule设置规则

@Configurationpublic class MyRandomRule {@Beanpublic IRule myRule(){return new RandomRule();}}

,在主启动类加上

@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRandomRule.class)

以下为Ribbon均衡负载规则的类型。

在spring-cloud后eureka移除了ribbon。需要使用LoadBalance来设置自定义的负载均衡。eureka自带了LoadBalance依赖,所以只需加入eureka客户端依赖。和ribbon一样需要配置RestTemplate实现远程调用。

自定义LoadBalance负载均衡策略

/*** 自定义随机负载均衡策略*/public class MyRandomRule {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory){String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);}}

创建RestTemplate时加上自定义负载均衡策略

/*** 配置RestTemplate* 使用@LoadBalanced 默认轮询的负载均衡策略*/@Configuration@LoadBalancerClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRandomRule.class)public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。