SpringCloud模拟微服务4-负载均衡Ribbon

10 篇文章 0 订阅
8 篇文章 0 订阅

SpringCloud模拟微服务4-负载均衡Ribbon

一.开启多一个user-service服务


可以使得尽管这个项目原来配置是8081,但是最后以jvm参数端口启动

二.在consumer-demo中引入Ribbon依赖

因为是consumer-demo写调用服务写负载均衡算法

<!--Ribbon负载均衡-->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

1.复杂的使用方式

@RestController
@RequestMapping("consumer")
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;
    
    @Autowired
    private RibbonLoadBalancerClient client;
    
    @GetMapping("{id}")
    public User queryById(@PathVariable("id") Long id){
        //user-service是之前在yaml配置的名字,可以同一个服务,启动多个,后面负载均衡要用所以用List集合
        //List<ServiceInstance> instances = discoveryClient.getInstances("user-service");
        //从(服务列表)实例当中取出ip和端口
        //ServiceInstance instance = instances.get(0);  //这个地方以后要自己写动态获取服务算法
        //随机,轮询,hash负载均衡算法
        ServiceInstance instance = client.choose("user-service");//默认采用轮询
        String url = "http://"+instance.getHost()+":"+instance.getPort()+"/user/"+id;
        User user = restTemplate.getForObject(url,User.class);
        return user;
    }
}

2.简单的使用方式

1.第一步找到consumer-demo启动器


@LoadBalanced会给RestTemplate内置一个拦截器拦截它的请求

2.修改controller

@RestController
@RequestMapping("consumer")
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("{id}")
    public User queryById(@PathVariable("id") Long id){
        //直接写user-service服务名称,Ribbon拦截器自己帮我们提供负载均衡
        String url = "http://user-service/user/"+id;
        User user = restTemplate.getForObject(url,User.class);
        return user;
    }
}
3.Ribbon拦截器源码




查看实现类

选则第一个(最基本的负载均衡器)



之后不知怎么地,直接ctrl+n搜索AbstractServerPredicate.java


4.自己修改采用的负载均衡方式

修改yaml文件

#添加一条
user-service:
    ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule 
        #这里修改成了使用随机负载均衡算法。默认为轮询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值