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更多的用法,请持续关注本系列教程。

求关注,求点赞,求转发

最适合新手入门的SpringCloud教程 6—Ribbon负载均衡「F版本」的更多相关文章

  1. SpringCloud学习(4)——Ribbon负载均衡

    Ribbon概述 SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. 简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软 ...

  2. SpringCloud无废话入门02:Ribbon负载均衡

    1.白话负载均衡 在上一篇的介绍中,我们创建了两个一模一样的服务提供者:Provider1和Provider2,然后它们提供的服务也一模一样,都叫Hello-Service.为什么一样的服务我们要部署 ...

  3. SpringCloud的入门学习之概念理解、Ribbon负载均衡入门

    1.Ribbon负载均衡,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端.负载均衡的工具. 答:简单的说,Ribbon是Netflix发布的开源项目,主要功能 ...

  4. SpringCloud系列之客户端负载均衡Netflix Ribbon

    1. 什么是负载均衡? 负载均衡是一种基础的网络服务,它的核心原理是按照指定的负载均衡算法,将请求分配到后端服务集群上,从而为系统提供并行处理和高可用的能力.提到负载均衡,你可能想到nginx.对于负 ...

  5. spring-cloud: eureka之:ribbon负载均衡自定义配置(二)

    spring-cloud: eureka之:ribbon负载均衡自定义配置(二) 有默认配置的话基本上就是轮询接口,现在我们改用自定义配置,同时支持:轮询,随机接口读取 准备工作: 1.eureka服 ...

  6. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  7. SpringCloud系列——Ribbon 负载均衡

    前言 Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制.我们在上篇(猛戳:SpringCloud系列——Feign 服务调用)已经实现了多个服务之间的Feign调用 ...

  8. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

    1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...

  9. spring-cloud: eureka之:ribbon负载均衡配置(一)

    spring-cloud: eureka之:ribbon负载均衡配置(一) 比如我有: 一个eureka服务:8761 两个user用户服务: 7900/7901端口 一个movie服务:8010 1 ...

随机推荐

  1. 【每日一包0017】pretty-ms

    [github地址:https://github.com/ABCDdouyae...] pretty-ms 将毫秒转换为容易读取的时间:1337000000 → 15d 11h 23m 20s 普通用 ...

  2. 【新功能】MaxCompoute禁止Full Scan功能开放

    摘要: 2018年1月10日,MaxCompute禁止Full Scan功能开放.对于新创建的project默认情况下执行sql时,针对该project里的分区表不允许全表扫描,必须有分区条件指定需要 ...

  3. Jquery实现checkbox全选、取消全选和反选

    最近在看廖雪峰的Jquery教程,事件篇的练习题比较综合,研究了很久终于研究出来了,现在分享出来,提供给小白学习.题目如下: 首先要获取到全选checkbox和每一项的checkbox,然后通过逻辑代 ...

  4. Matplotlib数据可视化(5):柱状图与直方图

      柱状图和直方图是两种非常类似的统计图,区别在于: 直方图展示数据的分布,柱状图比较数据的大小. 直方图X轴为定量数据,柱状图X轴为分类数据.因此,直方图上的每个条形都是不可移动的,X轴上的区间是连 ...

  5. 基于SpringCloud搭建项目-Zuul篇(六)

    本文主要介绍zuul的基本原理和在sprngcloud服务下如何使用 一.简单介绍 Zuul 是 Netflix OSS 中的一员,是一个基于 JVM 路由和服务端的负载均衡器.提供路由.监控.弹性. ...

  6. seo搜索优化教程05-SEO常用专业术语

    SEO常用的专业术语很多,星辉信息科技专门抽空进行了整理,主要如下:. SEO 根据搜索引擎规则来进行搜索引擎优化,进而使得在搜索结果中获得较好的排名 关键词 关键词也叫keywords,表示在搜索引 ...

  7. 18 JpaRepository和JpaSpecificationExecutor

    继承JpaRepository后的方法列表 JpaRepository findAll() List<T> findAll(Sort) List<T> findAll(Iter ...

  8. DOM解读

    DOM解读 DOM概念 - document object model:文档对象模型 操作文档的一套方法,document是一个对象,是dom的顶级对象,属于window的一个对象,并且可以说是最出色 ...

  9. MATLAB神经网络(5) 基于BP_Adaboost的强分类器设计——公司财务预警建模

    5.1 案例背景 5.1.1 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类.其主要步骤为:首先给出弱学习算法和样本空间($X$,$Y$),从样本空间 ...

  10. 第16个算法 - leetcode-二叉树的层次遍历

    二叉树的层次遍历 参考:https://www.cnblogs.com/patatoforsyj/p/9496127.html 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有 ...