企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 常用负载均衡算法 1. 随机. 2. 轮询. 3. ip hash. ## Ribbon Eureka中已经帮我们继承了负载均衡算法,在多个实例列表中进行选择.Ribbon,简单修改代码即可使用. Ribbon是Netfilx发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为.为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动的帮助服务消费者去请求.Ribbon默认为我们提供了很多的负载均衡算法,例如轮询,随机等.当然,我们也可为Ribbon实现自定义的负载均衡算法. ## 默认规则 Ribbon的默认规则是轮询. ## 修改默认规则 ~~~ user-server: //服务名称 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule //修改为随机 ~~~ ## 配置 在消费者服务导入依赖: ~~~ <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.0.1.RELEASE</version> </dependency> ~~~ ## 第一种使用方法 注入属性: ~~~ @Autowired private RibbonLoadBalancerClient client; ~~~ 获取服务实例: ~~~ //使用ribbon,内部已经用负载均衡为我们获取了实例 ServiceInstance instance = client.choose("user-server"); ~~~ ## 第二种使用方法 ~~~ package com.like; 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 ConsumerServer { public static void main(String[] args) { SpringApplication.run(ConsumerServer.class); } @Bean @LoadBalanced //加上此注解,得在RestTemplate这个bean上加才有效果 public RestTemplate restTemplate() { return new RestTemplate(); } } ~~~ 请求: ~~~ String url = "http://user-server/user/"; //中间直接写上服务的ID即可,ribbon会在RestTemplate内部使用拦截器进行负载均衡 return restTemplate.getForObject(url + id, User.class); ~~~