SpringCloud教程(Finchley版本)-03:负载均衡(Ribbon)

举报
IT云清 发表于 2019/01/23 19:44:07 2019/01/23
【摘要】 本文,介绍如何使用Ribbon来实现客户端的负载均衡。

#### Spring Cloud Ribbon是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它是一个工具类框架,不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。微服务间的调用,API网关的请求转发等,都是通过Ribbon来实现的,包括后面要介绍的Feign,也是基于Ribbon实现的工具。


##### 本文介绍如何使用Ribbon来实现客户端的负载均衡。主要分为以下几个步骤:

- 1.创建项目

- 2.引入依赖

- 3.修改配置文件

- 4.添加启动注解

- 5.注入模板类

- 6.跨服务调用

- 7.启动项目,测试 


### 1.创建项目

新建一个Springboot项目ribbon_server1。

### 2.引入依赖

ribbon依赖和eureka依赖

```

<!--eureka-client-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>


<!--eureka ribbon-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>

</dependency>

```

springcloud依赖,在<dependencies> </dependencies>标签外面:

```

<!--spring-cloud依赖-->

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>${spring-cloud.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

```


```

<spring-cloud.version>Finchley.SR2</spring-cloud.version>

```



### 3.修改配置文件


```

server:

  port: 8016

spring:

  application:

    name: service-ribbon

eureka:

  client:

    service-url:

      defaultZone: http://localhost:8761/eureka/


```


### 4.添加启动注解

启动类中,照例要给注册为一个eurekaClient,添加@EnableEurekaClient

### 5.注入模板类

在启动类中,注入RestTemplate模板到容器中,该对象会使用Ribbon的自动化配置,当开启了@LoadBalanced后,可以开启客户端负载均衡。


```

@EnableEurekaClient

@SpringBootApplication

public class RibbonServer1Application {


/**

*

* @Bean : 注入一个名为restTemplate的bean

* @LoadBalanced :表明这个 restTemplate 开启了负载均衡的功能

*

* */

@Bean

@LoadBalanced

RestTemplate restTemplate(){return new RestTemplate();}


public static void main(String[] args) {

SpringApplication.run(RibbonServer1Application.class, args);

}

}

```


### 6.跨服务调用

写一套简单的业务代码,然后调用前面创建的company-server服务提供的接口。

#### 6.1 controller


```

@RestController

//@RequestMapping(value = "ribbon")

public class RibbonController {


  @Autowired

  private RibbonService ribbonService;


  @GetMapping(value = "getCompany")

  public String getCompany(String id){

    String company = ribbonService.getCompany(id);

    System.out.println(company);

    return company;

  }

}

```


#### 6.2 service


```

public interface RibbonService {


  String getCompany(String id);

}


```


#### 6.3 serviceImpl

在serviceImpl实现类中,我们引入前面的RestTemplate模板类,来跨服务调用,并开启了负载均衡功能。


```

@Service

public class RibbonServiceImpl implements RibbonService{


  //启动类中注入了此模板,并且开启了负载均衡功能

  @Autowired

  RestTemplate restTemplate;


  //程序名替代服务地址,ribbon会根据服务名自动选择服务实例

  @Override

  public String getCompany(String id) {

    String company = restTemplate

        .getForObject("http://company-server/company/get?id=" + id, String.class);

    return company;

  }

}

```

### 7.启动项目,测试

启动项目,访问这个项目的接口http://localhost:8016/getCompany?id=1234,会发现,这个服务调用了company-server服务提供的接口,并且,接口在两个相同的服务间自动切换,也就是,实现了负载均衡的功能。


不断刷新接口,可以看到服务方发生了切换,如下:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20181129192145313.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20181129192157504.png)

当然,restTemplate提供了多种方法,get,post,delete,put等方法,这里只是示例了一种。


下一篇:[SpringCloud教程(Finchley版本)-04:断路器(Hystrix-Ribbon)](https://blog.csdn.net/weixin_39800144/article/details/84956571)

完整源码参考:https://github.com/myJava4all/springcloudfinchley


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。