前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud教程-03:负载均衡(Ribbon)

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

作者头像
IT云清
发布2019-05-15 10:22:57
4330
发布2019-05-15 10:22:57
举报
文章被收录于专栏:IT云清IT云清

摘要:本文主要讲解,在SpringCloud体系的微服务架构中,如何使用Ribbon来实现客户端的负载均衡。

在系统架构中,负载均衡是一个非常重要的部分,它对于系统的高可用,扩容,故障转移等方面都有着重要的影响。Spring Cloud Ribbon是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它是一个工具类框架,不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。微服务间的调用,API网关的请求转发等,都是通过Ribbon来实现的,包括后面要介绍的Feign,也是基于Ribbon实现的工具。通过SpringCloud Ribbon的封装,在微服务架构中实现服务端负载均衡变得非常简单。本文介绍如何使用Ribbon来实现客户端的负载均衡。

主要分为以下几个步骤:

  • 1.创建项目
  • 2.引入依赖
  • 3.修改配置文件
  • 4.添加启动注解
  • 5.注入模板类
  • 6.跨服务调用
  • 7.启动项目,测试

1.创建项目

新建一个Springboot项目ribbon_server1。

2.引入依赖

ribbon依赖和eureka依赖

代码语言:javascript
复制
    <!--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依赖:

代码语言:javascript
复制
  <!--spring-cloud依赖-->  <dependencyManagement>    <dependencies>      <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-dependencies</artifactId>        <version>Finchley.SR2</version>        <type>pom</type>        <scope>import</scope>      </dependency>    </dependencies>  </dependencyManagement>

3.修改配置文件

代码语言:javascript
复制
server:  port: 8016spring:  application:    name: service-ribboneureka:  client:    service-url:      defaultZone: http://localhost:8761/eureka/

4.添加启动注解

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

5.注入模板类

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

代码语言:javascript
复制
@EnableEurekaClient@SpringBootApplicationpublic 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

代码语言:javascript
复制
@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

代码语言:javascript
复制
public interface RibbonService {  String getCompany(String id);}

6.3 serviceImpl

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

代码语言:javascript
复制
@Servicepublic 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服务提供的接口,并且,接口在两个相同的服务间自动切换,也就是,实现了负载均衡的功能。

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

640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档