Spring Cloud入门实战(二) Ribbon--客户端负载均衡

Ribbon简介

Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。为Ribbon配置了服务提供地址列表后,它就会基于自己的负载均衡算法,自动的帮服务消费者去请求。Ribbon提供了很多负载均衡算法,轮询、随机等。也可以自己实现自定义的负载均衡算法。
当Ribbon和Eureka配合使用时,Ribbon就可以自动从Eureka Server获取服务提供者列表。
在这里插入图片描述

新建服务提供者

新建两个一模一样的服务提供者,相当于项目的集群,也就是说调用方按照负载均衡算法去随机调用服务提供者,为服务器减轻压力。

将之前的eureka-client 复制一份。配置如下

server:
  port: 8001
spring:
  application:
    name: eureka-client
eureka:
  client:
    service-url:
      defaultZone: http://user:123456@server1:8000/eureka/,http://user:123456@server2:8002/eureka/
    healthcheck:
      enabled: true

两个配置都一样,都注册名字为eureka-client的微服务。然后都提供一个查询服务的方法(写到chotroller中)。

@RestController("/getUser")
public class UserController {

    @RequestMapping("/{id}")
    public String getUserInfo(@PathVariable Long id){
        //进行数据库操作,这里省略 
        return "hello i'm user1 !! "; //这里是一个user1 一个user2 为了体现出调用到哪个
    }
}

将服务提供者都启动。
在这里插入图片描述
可以看到两个服务提供者 8001 和 8003 端口 都注册成功了。

新建一个服务消费方。
pom文件中加入Ribbon的配置,或者新建项目的时候选中Ribbon。

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
	</dependency>

配置文件中加入

server:
  port: 8004
spring:
  application:
    name: ribbon-consumer
eureka:
  client:
    service-url:
      defaultZone: http://user:123456@server1:8000/eureka/,http://user:123456@server2:8002/eureka/
    healthcheck:
      enabled: true

将消费者也注册到server集群。

然后修改启动类。加入RestTemplate。RestTemplate是Spring提供的用于访问Rest服务的客户端。并且加上@LoadBalanced注解。表示启用Ribbon的负载均衡功能。

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}

然后写一个测试的controller。

@RestController
public class UserController {

    @Autowired
    private RestTemplate restTemplate; 

    @RequestMapping("/user/{id}")
    public String getUserInfo(@PathVariable Long id){
		//调用服务提供者,也就是两个注册的eureka-client
        return restTemplate.getForObject("http://eureka-client/"+id,String.class);
    }
}

然后访问http://localhost:8004/user/1 可以发现,消费者就会负载的调用两个提供方了。
在这里插入图片描述
在这里插入图片描述

修改负载均衡规则

方法一:java代码

上面默认的是轮询,也就是123123123这样。我们来改成随机试试。

新建一个配置类。

@Configuration
public class RibbonConfiguration {

    @Bean
    public IRule ribbonRule(){
        //改为随机
        return new RandomRule();
    }
}

这个配置类最好不要被包扫描扫到,因为他如果被扫到了,所有的@RibbonClient就都会共享这个配置,如果只是要一个类运用这个规则,那就放到包扫描不到的地方。

然后在类上加上@RibbonClient(name = "eureka-client",configuration = RibbonConfiguration.class)。指定我们自定义的配置。

在这里插入图片描述
然后重启调用方(Ribbon),就会发现是随机调用了。

方法二:属性配置

还可以使用属性配置自定义Ribbon的负载规则。在yml文件中加入

eureka-client: # 这是服务提供者的名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

这样就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值