Springboot 实践(19)负载平衡配置与运用

news2024/9/30 13:30:05

        前文Springboot 实践(1)至Springboot 实践(18),我们分别讲解了springboot数据源配置、swagger-ui测试controller、整合security、整合Oauth2.0、服务注册、路由配置以及配置中心等单例功能开发,实现了各个系统之间的接口访问;在实际项目运用中,是如何解决在线用过大、负载过重问题呢?此文中我们引入负载均衡的概念,负载的轮询调用。

        首先我们开启consul服务注册服务端,然后利用MyEclipse2019建立两个工程,分别命名为Springboot-LoadBalance-producer1、Springboot-LoadBalance-producer2、两个工程配置相同的spring.application.name=mango-producer,同时,consul注册使用cld:

Consul.discovery.serviceName: ${spring.application.name}名称。

一、创建Springboot-LoadBalance-producer1项目

1、pom.xml文件,添加jar包

<!-- web -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <!-- swagger -->

        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger2</artifactId>

            <version>2.9.2</version>

        </dependency>

        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger-ui</artifactId>

            <version>2.9.2</version>

        </dependency>

        <!--spring-boot-admin-->

       <dependency>

            <groupId>de.codecentric</groupId>

            <artifactId>spring-boot-admin-starter-client</artifactId>

            <version>2.0.4</version>

        </dependency>

        <!--consul-->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-consul-discovery</artifactId>

        </dependency>

        <!--test-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

2、application.yml配置

        配置端口使用8003,应用名称为mango-producer

server:

  port: 8003

spring:

  application:

    name: mango-producer

  cloud:

    consul:

      host: localhost

      port: 8500

      discovery:

        serviceName: ${spring.application.name} # 注册到consul的服务名称

  boot:

    admin:

      client:

        url: "http://localhost:8000"

# 开放健康检查接口

management:

  endpoints:

    web:

      exposure:

        include: "*"

  endpoint:

    health:

      show-details: ALWAYS

3、添加启动函数

@EnableDiscoveryClient

@SpringBootApplication

public class MangoProducerApplication {

public static void main(String[] args) {

        SpringApplication.run(MangoProducerApplication.class, args);

    }

}

4、添加controller

@RestController

public class HelloController {

    @RequestMapping("/hello")

    public String hello() {

        return "hello Mango !";

    }

}

5、启动项目,观察consul用户界面,如下图所示;此时mango-producer应用只有一个实例即“1 instance”。

二、创建Springboot-LoadBalance-producer2项目

        拷贝Springboot-LoadBalance-producer1项目,项目名称依旧使用“mango-producer”,项目端口号改为“8004”,controller改成 return “hello Mango2”,启动项目,观察consul用户界面,如下图所示:此时mango-producer应用只有liangge个实例即“2 instance”。

三、创建消费者工程,命名为Springboot-LoadBalance-consumer项目

        拷贝Springboot-LoadBalance-producer1项目,项目名称改为“mango-consumer”,项目端口号改为“8005”,添加controller如下:

@RestController

public class ServiceController {

    @Autowired

    private LoadBalancerClient loadBalancerClient;

    @Autowired

    private DiscoveryClient discoveryClient;

   /**

     * 获取所有服务

     */

    @RequestMapping("/services")

    public Object services() {

        return discoveryClient.getInstances("mango-producer");

    }

    /**

     * 从所有服务中选择一个服务(轮询)

     */

    @RequestMapping("/discover")

    public Object discover() {

        return loadBalancerClient.choose("mango-producer").getUri().toString();

    }

}

启动项目,观察consul用户界面,如下图所示:

四、测试

        在浏览器中数据discover访问地址,先后两次分别访问8003、8004接口,是因为默认的负载均衡loadBalancerClient采用轮询方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Avalonia开发(一)环境搭建

一、介绍 开源 GitHub&#xff1a;https://github.com/AvaloniaUI/Avalonia/多平台支持&#xff0c;包括Windows、mac OS、Linux、iOS、Android、Samsung Tizen&#xff08;很快支持&#xff09;、WebAssemblyIDE支持&#xff0c;Visual Studio扩展支持&#xff0c;JetBrains …

NLP技术如何为搜索引擎赋能

目录 1. NLP关键词提取与匹配在搜索引擎中的应用1. 关键词提取例子 2. 关键词匹配例子 Python实现 2. NLP语义搜索在搜索引擎中的应用1. 语义搜索的定义例子 2. 语义搜索的重要性例子 Python/PyTorch实现 3. NLP个性化搜索建议在搜索引擎中的应用1. 个性化搜索建议的定义例子 2…

学习笔记-接口测试(postman、jmeter)

目录 一、什么是接口测试 二、前端和后端 三、get请求和post请求的区别 四、cookie和session 五、接口测试的依据 六、HTTP状态码 七、通用接口用例 八、postman接口测试 九、Jmeter接口测试 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比…

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式

目录 一、前言 二、实验环境 三、NumPy 0. 多维数组对象&#xff08;ndarray&#xff09; a. 多维数组的属性 1. 创建数组 a. 使用numpy.array函数&#xff1a; b. 使用numpy.zeros函数 c. 使用numpy.ones函数 d. 使用numpy.arange函数 e. 使用numpy.linspace函数 …

旋转链表-双指针思想-LeetCode61

题目要求&#xff1a;给定链表的头结点&#xff0c;旋转链表&#xff0c;将链表每个节点向右移动K个位置。 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k2 输出&#xff1a;[4,5,1,2,3] 双指针思想&#xff1a; 先用双指针策略找到倒数K的位置&#xff0c;也就是(…

根据商品ID获得淘宝商品详情, 获得淘宝商品详情高级版,获得淘宝商品评论, 获得淘宝商品快递费用 ,获得淘口令真实,批量获得淘宝商品上下架时间)

参数说明 通用参数说明 参数不要乱传&#xff0c;否则不管成功失败都会扣费url说明 https://api-gw.…….cn/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_…

火山引擎A/B测试在消费行业的案例实践

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;火山引擎数智平台举办了“走进火山-全链路增长&#xff1a;数据飞轮转动消费新生力”的活动&#xff0c;其中火山引擎数智平台DataTester产品负责人…

家居设计软件Live Home 3D Pro mac中文版特点介绍

Live Home 3D Pro mac是一款专业的3D家居设计软件&#xff0c;可以帮助用户轻松创建和设计家居平面图和3D模型&#xff0c;并进行渲染和虚拟漫游。​​​​​​​ ​Live Home 3D Pro mac软件特点 1. 界面友好&#xff1a;Live Home 3D Pro的界面友好&#xff0c;操作简单方便…

MyBatis基础之SqlSession

SqlSession 线程安全问题 当你翻看 SqlSession 的源码时&#xff0c;你会发现它只是一个接口。我们通过 MyBatis 操作数据库&#xff0c;实际上就是通过 SqlSession 获取一个 JDBC 链接&#xff0c;然后操作数据库。 SqlSession 接口有 3 个实现类&#xff1a; #实现类1Defa…

北斗+渔业:且看北斗卫星如何提升渔业监管水平

近日&#xff0c;为确保渔业船舶海上航行安全和管理&#xff0c;海南省农业农村厅近日发布通告&#xff1a;全省小型海洋渔船须于今年9月30日前完成北斗船载终端安装&#xff0c;大中型海洋渔船须于今年11月30日前同时完成北斗船载终端和“插卡式AIS”终端安装。 近年来&#x…

两种风格的纯CSS3加载动画

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>加载动画</title><style>.loader {w…

调用feign接口时手动设置请求头信息

调用feign接口手动设置请求头 一 需求场景&#xff1a;二 解决方法2.1 feign接口添加RequestHeader的注解2.2 provider正常从请求头获取参数2. 3 consumer手动传参2.4 测试 一 需求场景&#xff1a; 我们在provider服务有些参数是从请求头中获取的&#xff0c;但是consumer服务…

单元测试的重要性:编写更安全、更可靠的代码

在软件开发过程中&#xff0c;测试是非常重要的一环。而在众多的测试方法中&#xff0c;单元测试占据了不可忽视的地位。那么&#xff0c;为什么我们需要进行单元测试呢&#xff1f;以下将从理论和实践两方面进行详细的解释。 一、单元测试的定义和目的 单元测试是指对软件中的…

FullGC了怎么办?

什么情况下回触犯FullGC 使用了大对象 //大对象会直接进入老年代在程序中长期持有了对象的引用 //对象年龄达到指定阈值也会进入老年代JVM内存设置不合理 FullGC出现的表象 CPU飙升或忽高忽低&#xff1b;程序性能不问题&#xff0c;接口响应时间比较长。 如何判断FullGC …

ChatGLM GPU多卡并行训练

1.为什么要使用多GPU并行训练 简单来说,有两种原因:第一种是模型在一块GPU上放不下,两块或多块GPU上就能运行完整的模型(如早期的AlexNet)。第二种是多块GPU并行计算可以达到加速训练的效果。想要成为“炼丹大师“,多GPU并行训练是不可或缺的技能。 2. 常见的多GPU训练方…

探讨UUID和Secrets:确保唯一性与数据安全的利器

&#x1f600;前言 在现代软件开发中&#xff0c;唯一标识符&#xff08;UUID&#xff09;和机密信息的处理是至关重要的。UUID是用于唯一标识数据记录和对象的128位值&#xff0c;确保了全球范围内的唯一性。同时&#xff0c;Python的secrets模块为处理机密信息提供了强大的随…

构造二叉树(已知前序遍历,中序遍历,求后序遍历)

此题涉及到的<unordered_map>所建立的哈希表,没有多复杂&#xff0c;但对构造树方面确是很方便&#xff0c; 有时候掌握一些这样的额外知识&#xff0c;对编程大有帮助&#xff0c;例如vector容器&#xff0c;string类型等等。千里之行&#xff0c;始于足下。不停积累编…

GE WES5302-150 数字量控制模块

GE WES5302-150 是一款数字量控制模块&#xff0c;通常用于工业自动化和控制系统中&#xff0c;主要用于数字信号的输入和输出控制。以下是该模块的一些主要产品功能&#xff1a; 数字量输入&#xff1a;WES5302-150 模块通常具有多个数字输入通道&#xff0c;用于接收数字信号…

浏览量5.54亿,“平替大军”击退“钱包刺客”?丨小红书消费趋势分析

当代年轻人的消费观念&#xff0c;从贷款买大牌的“精致穷”&#xff0c;逐渐演变为人间清醒式地购物...他们爱上麦当劳的“穷鬼套餐”&#xff0c;爱喝瑞辛9.9元畅饮&#xff0c;爱和小学生成为“饭搭子”吃小饭桌&#xff0c;爱买低价打折出售的剩菜盲盒&#xff0c;爱出门吃…