最适合新手入门的SpringCloud教程 6—Ribbon负载均衡「F版本」

简介:

SpringCloud版本:Finchley.SR2
SpringBoot版本:2.0.3.RELEASE
源码地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

前言

写博客一个多月了,断断续续的更新,今天有小伙伴催更新了,很高兴,说明我的分享是有意义的。

于是乎,更新来了,还顺便给该系列教程改了个名儿《最适合入门的SpringCloud教程》

通过之前的几篇文章,在代码中会有三个项目,分别是两个注册中心和一个客户端,如下图:

今天将会在这个代码的基础上:

  1. 将 eureka-client-8803 作为服务提供者
  2. 通过IDEA将eureka-client-8803启动在8803和8804端口上,模拟服务提供者集群
  3. 再创建一个服务消费者eureka-consumer-8805
  4. 让消费者通过服务调用和负载均衡调用服务提供者的服务。

Tips:需要了解过RestTemplate的使用 SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

服务提供者集群运行,创建服务消费者

服务提供者写Controller接口

在服务提供者eureka-client-8803中写入一个TestController类

package com.lby.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author luxiaoyang
 * @create 2020-04-02-20:13
 */
@RestController
public class TestController {

    /**
     * @Value("${server.port}") 读取application配置文件中的值
     * 赋值到成员变量上
     *
     * ${server.port} 参数为 application配置文件中的key
     */
    @Value("${server.port}")
    private String port;

    /**
     * @RequestParam 获取Request参数的 用于RestFul风格中
     * @PathVariable 获取路径中的参数
     */
    @GetMapping("showImgById")
    public String showImgById(@RequestParam("id") Integer id){
        return "查询到id为:"+id+"的信息,使用端口号为:"+port;
    }

}

通过IDEA在8803和8804端口号启动服务提供者「模拟集群」

IDEA 中 默认项目启动是单例的,即一个项目只能够在一个端口号启动一次。但是在IDEA 实际上是支持多实例的,一个项目可以通过修改端口号启动多次。

以eureka-client-8803为例

1.修改eureka-client-8803的IDEA启动设置

IDEA的版本不同,还会出现如图所示的配置

2.在 8803 端口号启动项目

3.不要关闭 8803 这个服务,然后直接修改yml中的端口号为8804,再次通过启动类启动

通过以上步骤,就启动了两个服务提供者,用来模拟集群,效果如下

创建服务消费者 eureka-consumer-8805

根据之前教程中的步骤,再创建一个客户端eureka-consumer-8805作为消费者

pom配置

 <dependencies>
        <!--        Eureka 客户端的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!--        web的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--        测试的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application配置文件

server:
  port: 8805

#指定当前服务的名称  会注册到注册中心
spring:
  application:
    name: eureka-consumer-8805

#  指定 服务注册中心的地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8801/eureka,http://localhost:8800/eureka

启动类

package com.lby;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author luxiaoyang
 * @create 2020-04-02-20:43
 */
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumer8805 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumer8805.class,args);
    }
}

服务调用和负载均衡

Ribbon负载均衡

Ribbon是一个基于HTTP和TCP的客户端负载均衡工具。

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的负载均衡算法。
 

关于Ribbon的简介,有一个名词需要进行解释,客户端负载均衡?
负载均衡是一种非常常见的技术,例如:Nginx,F5。

对于Nginx来说,在Nginx中存储一份服务端的清单,用户的请求到达Nginx之后,Nginx会根据负载均衡策略从服务清单中选择一台服务器去处理客户端的请求。
服务清单存储在负载均衡服务中,这就是服务端负载均衡
客户端负责均衡,例如Ribbon,本身是不存储可用服务清单的,需要服务清单的时候通过服务节点找注册中心获取。

服务消费者 eureka-consumer-8805 中通过RestTemplate+Ribbon调用服务提供者

RestTemplate+Ribbon的配置

1.在服务消费者 eureka-consumer-8805中导入Ribbon的依赖

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

2.在启动类中写RestTemplate+Ribbon的配置

演示Ribbon负载均衡的效果

1.在消费者中创建接口 通过RestTemplate调用服务提供者

package com.lby.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author luxiaoyang
 * @create 2020-04-02-20:49
 */
@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 调用服务提供者
     */
    @RequestMapping("/consumer/showConsumer")
    public String showConsumer(){
        /**
         * 通过Ribbon 发送服务调用 用的是RestTemplate
         * RestTemplate 本身没有负载均衡的能力
         *
         * 注意:RestTemplate请求地址中写的不是 ip+端口号 而是被调用服务的服务名称
         */
        String object = restTemplate.getForObject("http://eureka-client-8803/showImgById?id=1", String.class);

        return "查询到服务提供者的数据,"+object;
    }
}

注意:RestTemplate请求地址中写的不是 ip+端口号 而是被调用服务的服务名称

2.重启所有的服务,两个服务提供者,一个服务消费者

3.访问服务消费者的接口

请求地址:http://localhost:8805/consumer/showConsumer
可以看到每次请求端口号不一样

总结

以上就是RestTemplate+Ribbon的负载均衡的基本使用

  • RestTemplate负责服务调用
  • Ribbon实现负载均衡

源码地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。

要掌握SpringCloud更多的用法,请持续关注本系列教程。

求关注,求点赞,求转发

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7月前
|
应用服务中间件 Nacos nginx
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
本文为 Mac 用户介绍微服务项目环境搭建,含阿里云服务器用 Docker 装 Nacos 1.2.0,本地通过 brew 装 OpenJDK 8、Maven 3.6.1、Redis,Docker 部署 MySQL 5.7 并配字符集,及 Nginx 安装与反向代理设置,附命令与配置步骤。
446 4
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
|
负载均衡 Java Nacos
Ribbon负载均衡
Ribbon负载均衡
186 1
Ribbon负载均衡
|
12月前
|
SpringCloudAlibaba Java Nacos
尚硅谷SpringCloud教程 笔记
本文介绍了基于Spring Cloud Alibaba构建的cloud-demo工程创建步骤,包括父模块及子模块的配置。父模块采用pom打包方式,定义了Java 8、Spring Boot 2.4.2、Spring Cloud 2020.0.1及Spring Cloud Alibaba 2021.1版本。包含三个主要模块:services(依赖Nacos)、service-order和service-product(均依赖spring-boot-starter-web)。同时提供了discoveryClient的测试代码,展示服务发现功能的实现与验证过程。
703 12
尚硅谷SpringCloud教程 笔记
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
1360 61
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
4061 1
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
4087 8
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
下一篇
开通oss服务