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

SpringCloud版本:Finchley.SR2
SpringBoot版本:2.0.3.RELEASE
源码地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials
前言
写博客一个多月了,断断续续的更新,今天有小伙伴催更新了,很高兴,说明我的分享是有意义的。

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

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

今天将会在这个代码的基础上:
- 将 eureka-client-8803 作为服务提供者
- 通过IDEA将eureka-client-8803启动在8803和8804端口上,模拟服务提供者集群
- 再创建一个服务消费者eureka-consumer-8805
- 让消费者通过服务调用和负载均衡调用服务提供者的服务。

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实现负载均衡
恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。

要掌握SpringCloud更多的用法,请持续关注本系列教程。
求关注,求点赞,求转发
最适合新手入门的SpringCloud教程 6—Ribbon负载均衡「F版本」的更多相关文章
- SpringCloud学习(4)——Ribbon负载均衡
Ribbon概述 SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. 简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软 ...
- SpringCloud无废话入门02:Ribbon负载均衡
1.白话负载均衡 在上一篇的介绍中,我们创建了两个一模一样的服务提供者:Provider1和Provider2,然后它们提供的服务也一模一样,都叫Hello-Service.为什么一样的服务我们要部署 ...
- SpringCloud的入门学习之概念理解、Ribbon负载均衡入门
1.Ribbon负载均衡,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端.负载均衡的工具. 答:简单的说,Ribbon是Netflix发布的开源项目,主要功能 ...
- SpringCloud系列之客户端负载均衡Netflix Ribbon
1. 什么是负载均衡? 负载均衡是一种基础的网络服务,它的核心原理是按照指定的负载均衡算法,将请求分配到后端服务集群上,从而为系统提供并行处理和高可用的能力.提到负载均衡,你可能想到nginx.对于负 ...
- spring-cloud: eureka之:ribbon负载均衡自定义配置(二)
spring-cloud: eureka之:ribbon负载均衡自定义配置(二) 有默认配置的话基本上就是轮询接口,现在我们改用自定义配置,同时支持:轮询,随机接口读取 准备工作: 1.eureka服 ...
- SpringCloud学习笔记(2):使用Ribbon负载均衡
简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...
- SpringCloud系列——Ribbon 负载均衡
前言 Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制.我们在上篇(猛戳:SpringCloud系列——Feign 服务调用)已经实现了多个服务之间的Feign调用 ...
- SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)
1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...
- spring-cloud: eureka之:ribbon负载均衡配置(一)
spring-cloud: eureka之:ribbon负载均衡配置(一) 比如我有: 一个eureka服务:8761 两个user用户服务: 7900/7901端口 一个movie服务:8010 1 ...
随机推荐
- 【JavaScript】DOM之表单操作
DOM 表单操作 1.获取表单 获取表单元素 以Document对象中forms属性来获取当前HTML页面所有表单集合以Document对象中表单的name属性值来获取表单元元素 <body&g ...
- OC和C++混编需要注意的问题
文章首发于github.io 2018-12-17 21:01:55 方案一 1. .c文件的identify and type右边栏修改为Objective-C source 2. Built se ...
- Spring配置cache(concurrentHashMap,guava cache、redis实现)附源码
在应用程序中,数据一般是存在数据库中(磁盘介质),对于某些被频繁访问的数据,如果每次都访问数据库,不仅涉及到网络io,还受到数据库查询的影响:而目前通常会将频繁使用,并且不经常改变的数据放入缓存中,从 ...
- 备份Oracl数据库.bat
=========================== @echo off echo ================================================ echo Win ...
- docker 技术全面整理
docker 和 vm 虚拟机技术比较像,但又有一些区别. vm 像真机一样有 BIOS ,有硬盘,有网卡,声卡,可以安装操作系统, win7 win10 macOS ubuntu centOS,有好 ...
- Oracle学习笔记--Oracle启动过程归纳整理
Oracle 启动过程分为nomount状态mount状态open状态 每个状态下Oracle都会进行不同的操作:1.nomount状态 在$ORACLE_HOME/dbs目录下寻找参数文件 参数文件 ...
- LeetCode-矩形重叠
题目描述: 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的是,只在 ...
- Win2012+Nginx+IIS+xxfpm(服务版)
这次做了一个项目部署在环境为win2012+nginx1.13.5+mysql5.6+php7的环境下,服务器是阿里云的 由于之前没有这种经验,遇到了点坑(据参考文章里说的这坑还有些年份了),最开始自 ...
- 计算机网络 Computer Networks 期末复习总提纲
平时不学习,期末火葬场. 一周时间靠王道考研和各路 pdf 自学计网,留下的提纲都在这里了.全是干货.全文 pdf 可以在这里下载:http://cloud.billc.io/s/xNHarppQPG ...
- M-Renamer方法名修改器,iOS项目方法名重构,Objective-C/Swift,代码模型预判,减少误改的机率,替换速度更快,可视化操作,傻瓜式操作,一键操作,引用处自动修改,马甲包的福音
M-Renamer M-Renamer(Method-Name-Renamer)类方法名修改器,采用链式解析头文件,代码模型预判,减少误改的机率,替换速度更快:可以解析整个项目大多数类的方法,可视化操 ...