Spring Cloud Netflix 负载均衡组件—Ribbon 入门案例

Ribbon是Spring Cloud Netflix提供的负载均衡组件,提供了很多算法,比如轮询、随机等帮助我们根据某种机制向服务提供端发送请求。在Netflix中,Ribbon可以从Eureka Server中获取服务提供者地址列表,并且基于负载均衡算法,请求其中的一个服务实例。

引入Ribbon的组件非常简单,我们只需要在项目中引入Ribbon,请使用groupID为org.springframework.cloud和artifact ID为spring-cloud-starter-netflix-ribbon的starter。

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

在这里我们需要创建两个模块ribbon-provider和ribbion-consume两个模块,并且运行多个ribbon-provider服务注册到eureka-server中。如下为ribbon-provider模块代码和配置,作为服务提供者。

spring:
  application:
    name: ribbon-provider #应用实例名称,Ribbon可以根据该名称调用服务
server:
  port: 9090
eureka:
  instance:
    appname: ribbon-provider #实例名称,
  client:
    fetch-registry: false   #服务提供者 不需要,获取服务列表
    register-with-eureka: true #服务提供者,将服务注册到 Eureka Server
    service-url:
      defaultZone: http://localhost:8671/eureka

为了简化开发,在ribbon-provider模块中我们只是使用Spring Boot应用创建一个Restful接口,返回Hello+Name。代码如下所示,启动类不在展示:

@RestController
public class HelloController {
    @RequestMapping("/hello/{name}")
    public String sayHello(@PathVariable String name) {
        return "hello" + name + "!";
    }
}

然后我们开发ribbion-consume,为了简单,restful接口与ribbon-provider一致,consume调用ribbon-provider接口使用的是我们熟悉的RestTemplate类,Ribbon对其进行增强,添加了负载均衡等功能,要使用该功能需要在RestTemplate Bean上加上@LoadBalanced注解,代码如下所示:

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

接着我们在HelloNameController类中使用RestTemplate 实例调用 provider中的接口,这里值得注意的是URL中的地址为spring.application.name的值。如果没有配置,则会报错误,这里建议只要是Spring Boot应用,全部加上该配置,如下为consume接口代码部分:

@RestController
public class HelloNameController {
    @Autowired
    private RestTemplate restTemplate;
    @RequestMapping("/hello/{name}")
    public String sayHello(@PathVariable String name) {
        //URL为服务提供者实例名称(spring.application.name)+请求路径
        return restTemplate.getForObject("http://ribbon-provider/hello/"+name,String.class);
    }

使用Ribbon,我们仅仅在RestTemplate上加上@LoadBalanced即可以完成负载均衡功能,除此之外,Ribbon还支持更多的配置已完成更高级的功能,我们会在下一篇内容讲解。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值