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

bcf875f12566b5645cbf8cd0d2c50ebd.png

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

前言

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

0dd7782a1aa16ea20b832b725f0b50c1.png

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

f7d0e34c4cce12cf5934adb7e97b0e80.png

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

ea03b6bc491833c218e1d255dfd907ec.png

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

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

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 */@RestControllerpublic 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启动设置

0b35fcabd2a61e7da33d8787d30232d8.png
37eec7a8fb15d54cc6b2e3b20cbfcb5a.png

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

bf8f9cce9e1d693374a385f671142633.png

2.在 8803 端口号启动项目

c23f531a726960695cfce29f845becb8.png
35f54d0bab440cc034f92d84354865cc.png

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

063c9766135831be523ff7ee1e17e90d.png
50998fd1d77dca98b8593b4c464b865b.png

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

cd6ec92a5e1f2546f3154599024cf4a9.png

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

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

702d65f3bad61d5b828418a3fc5f9666.png

pom配置

 org.springframework.cloud            spring-cloud-starter-netflix-eureka-client        org.springframework.boot            spring-boot-starter-web        org.springframework.boot            spring-boot-starter-test            test

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@SpringBootApplicationpublic class EurekaConsumer8805 {    public static void main(String[] args) {        SpringApplication.run(EurekaConsumer8805.class,args);    }}

服务调用和负载均衡

Ribbon负载均衡

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

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

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

521013b0766c687590690849b4c7fca4.png

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

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

RestTemplate+Ribbon的配置

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

org.springframework.cloud    spring-cloud-starter-netflix-ribbon

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

f947805104e9b7e230539701ef264428.png
演示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 */@RestControllerpublic 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 可以看到每次请求端口号不一样

8589c4291179ac0e925a1cc6866f1ca2.png
d15f4ac4e33b9a6938c9450855a7dae8.png

总结

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

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

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

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

c0306149277b912e9d53f9fe96cd0ab8.png

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

求关注,求点赞,求转发

# springcloud-zone #### 项目介绍 项目为学习用途搭建,主要包括以下模块: springcloud-register:服务注册中心 (eureka-server),提供服务注册与发现功能。 springcloud-config:远程配置中心,分为git与native两个版本,为producer提供远程配置。 springcloud-connect:数据连接中心,包含DB、Redis、MQ、Mail等组件的配置入口,只需其他模块在pom中添加依赖并提供相关配置即可快速接入。 springcloud-producer:服务提供者,包含具体的业务逻辑实现等。 springcloud-consumer:服务消费者,从eureka server中获取producer提供的服务。 springcloud-gateway:网关接口,暴露给调用方调用,包含负载均衡、重试、熔断等功能。 springcloud-zipkin:链路跟踪工具,监控并就持久化微服务集群中调用链路的通畅情况,采用rabbitmq异步传输、elasticsearch负责持久化的方式集成。 #### 软件架构 1、JDK:jdk-8u181-windows-x64。 2、MAVEN:apache-maven-3.5.4 3、IDE:spring-tool-suite-3.9.3.RELEASE-e4.7.3-win32-x86_64 4、springboot:1.5.10.RELEASE。 5、springcloud:Edgware.SR2版本 #### 安装教程 需要提前安装如下程序: 1、ActiveMQ。 2、RabbitMQ。 3、Redis 4、Elasticsearch。 5、Elasticsearch-head。 6、MYSQL(执行springcloud-producer目录src/main/resources/templates/datasource.text中的建表语句) #### 使用说明 项目运行顺序: 1、 springcloud-register, 2、 springcloud-config-native或者springcloud-config-git: 启动git远程配置中心需要修改springcloud-producer项目的bootstrap.yml配置文件,并将配置配件上传到git上。 3、springcloud-zipkin。 4、 springcloud-producer。 5、springcloud-consumer。 6、springcloud-gateway. 注: 在测试gateway负载均衡时可以启动单个项目的多个实例,具体方式如下: 1、项目启动类右键run as->run configurations..,打开配置框。 2、java application右键new,打开新建窗口。 3、顶部tab选中Main,在name中填写启动类名称,project中填写项目名称,main class中填写启动类详细路径+类名。 4、顶部tab选中Arguments,在VM arguments中填写-Dserver.port=端口号,比如-Dserver.port=8080 5、点击run即可以配置的端口号启动多个项目实例了。 #### 参与贡献 ningchongqing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值