spring cloud系列学习(二、SpringCloud之服务注册之Ribbon负载均衡)

2023-11-14

 上个章节我们已经启动了服务生产者实例,这一章我们会启动四个不同端口的实例,然后如何通过负载平衡访问呢?这时就需要Ribbon,为了使用Ribbon,我们需要使用@LoadBalanced元注解,那么这个注解放在哪里呢?一般有两个DiscoveryClient 和 RestTemplate

然后选择spring web 、spring cloud discovery和spring cloud routing支持

下一步,生成目录

pom.xml文件内容自动生成

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.springcloud</groupId>
    <artifactId>ribbon-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ribbon-consumer</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

修改整合ribbon 启动类RibbonConsumerApplication 加入注解

@EnableDiscoveryClient 注册到eureka注册中心
@Bean  加入ioc容器
@LoadBalanced  让restemplate具有负载均衡能力
package com.springcloud.ribbonconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class RibbonConsumerApplication {
    @Bean
    @LoadBalanced
    RestTemplate restTemplate () {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }

}

配置eureka参数

spring.application.name=eureka-consumer
server.port=8083
## 心跳时间,即服务续约间隔时间(缺省为30s)
#eureka.instance.lease-renewal-interval-in-seconds= 5
## 发呆时间,即服务续约到期时间(缺省为90s)
#eureka.instance.lease-expiration-duration-in-seconds= 15
## 开启健康检查(依赖spring-boot-starter-actuator)
#eureka.client.healthcheck.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:3456/eureka/

新增controller文件夹,加入ConsumerController接口

package com.springcloud.ribbonconsumer.Controller;

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

@RestController
public class ConsumerController {

    @Autowired
    RestTemplate restTemplate;

    @RequestMapping(value ="/ribbon-consumer", method = RequestMethod.GET)
    public String helloConsumer() {
       return restTemplate.getForEntity("http://eureka-client/hello", 
                String.class).getBody();
    }
 
}

其中http://eureka-client/hello",中的eureka-client为注册在eureka注册中心的实例名称

hello为服务实例中提供的接口名,上章文章中服务实例没有这个接口,我们去添加一下

package com.springcloud.eurekaclient.Controller;

import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.logging.Logger;

@RestController
public class HelloController {
    @Value("${server.port}")
    String port;


    @RequestMapping(value = "hello", method = RequestMethod.GET)
    public String index() {
        StringBuffer uriList = new StringBuffer("Hello World " + port + " 端口为您服务!<br>");
        return uriList.toString();
    }
}

然后新增两个资源文件--为了同一个moudle可以启动多次(根据不同的端口启动)

spring.application.name=eureka-client
server.port=8081
# 心跳时间,即服务续约间隔时间(缺省为30s)
eureka.instance.lease-renewal-interval-in-seconds= 5
# 发呆时间,即服务续约到期时间(缺省为90s)
eureka.instance.lease-expiration-duration-in-seconds= 15
# 开启健康检查(依赖spring-boot-starter-actuator)
eureka.client.healthcheck.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:3456/eureka/

spring.application.name=eureka-client
server.port=8082
# 心跳时间,即服务续约间隔时间(缺省为30s)
eureka.instance.lease-renewal-interval-in-seconds= 5
# 发呆时间,即服务续约到期时间(缺省为90s)
eureka.instance.lease-expiration-duration-in-seconds= 15
# 开启健康检查(依赖spring-boot-starter-actuator)
eureka.client.healthcheck.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:3456/eureka/

选择填写三处内容

新增EurekaclientApplication1\EurekaclientApplication2两个后最终为

此时可以分别启动EurekaServerApplication(服务注册中心)、EurekaclientApplication(实例1)、EurekaclientApplication1(实例2)、EurekaclientApplication2(实例3)、RibbonConsumerApplication(Ribbon请求入口)

再次访问http://localhost:3456/服务注册中心,就会发现三个client实例,一个EUREKA-CONSUMER

然后访问http://localhost:8083/ribbon-consumer

这是ribbon会根据注册的三个实例轮询请求

本文是通过RestTemplate进行访问,我们还可以通过DiscoveryClient 进行访问

1、获取实例集合,我们可以轮询或者根据自己要求去灵活访问

List<ServiceInstance> instances=discoveryClient.getInstances("eureka-client");
ServiceInstance serviceInstance=instances.get(0);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring cloud系列学习(二、SpringCloud之服务注册之Ribbon负载均衡) 的相关文章

  • Windows下在虚拟机VMware中安装Ubuntu 18.04(一个安装了很多次Ubuntu的详细步骤和经验,避免踩不必要的坑)

    我安装了ubuntu很多次 以前在网上学习了很多版本的安装步骤 以前经验不足 出现了很多问题 比如说 学习过程中出现内存或磁盘不足 而且有时候无法扩展或扩展很麻烦 这很浪费时间和降低学习效率 甚至Ubuntu有时会很卡 启动慢 我觉得最严重
  • ag-grid基本配置

    columnDefs headerName 序号 必填 显示在表头的文本 width 50 宽度 minWidth 300 最小宽度 多数情况是在自适应时 设置使用 maxWidth 300 最大宽度 多数情况是在自适应时 设置使用 cel
  • 设计模式(一) 工厂方法模式

    介绍 关于设计模式 大家可能已经有很多了解了 因此这里直接开始吧 首先来介绍一下工厂方法模式 它是一种创建型模式 在设计模式 可复用面向对象软件的基础中对工厂方法由如下的解释 工厂方法模式的实质是 定义一个创建对象的接口 但让实现这个接口的

随机推荐

  • Intellij IDEA中使用Protobuf的正确姿势

    1 proto文件语法高亮显示 需要安装Protobuf Support插件 依次点击Intellij中的 File gt Settings gt Plugins gt Browse repositories 如下所示 输入Protobuf
  • eclipse中将项目打包成jar,并启动

    第一种 利用eclipse中自带的export功能 第一种方法分两种情况先来看第一种情况 没有引用外部jar的项目打包 步骤一 右键点击项目选择导出 export 选择java gt jar文件 不是选择可运行jar文件 步骤二 选择你要导
  • python3.7 解决古代计算题--牛刀小试

    首先来看下题目 今有物不知其数 三三数之剩二 五五数之剩三 七七数之剩二 问物几何 第一代 print 今有物不知其数 三三数之剩二 五五数之剩三 七七数之剩二 问物几何 n number int input 请输入你认为符合条件的数字 i
  • 【计组笔记-5】详细测试c++中类型转换的溢出截断处理

    计组笔记 5 详细测试c 中类型转换的溢出截断处理 1 将小数赋值给float 2 将整数赋值给float 3 将整数赋值给int 3 1 算术溢出 3 2 非算术溢出 等于32位 3 3 非算术溢出 大于32位 4 将小数赋值给int 5
  • python的扩展控制鼠标

    1 使用资料 PyAutoGUI 简介 今天要介绍的工具就是 PyAutoGUI 看到这个名字 就能猜到它的作用 无非用 Python 自动处理图形界面的操作 的确是这样 你可以使用编程的方式来控制电脑的鼠标和键盘 它有两个优点 跨平台 支
  • condavalueerror: malformed version string ‘~‘: invalid character(s)解决方法

    安装python包时出现condavalueerror malformed version string invalid character s 的错误提示解决方法如下 1 使用如下命令删除之前的源 若之前没有在conda中进行换源操作 此
  • ajax请求二进制流图片并渲染到html中img标签

    说明 后台返回图片二进制流 需要使用get请求获取返回结果 并且将返回的二进制流以图片形式显示在页面img中 但是日常显示图片都诸如这种形式 img src 图片路径 地址 alt 以上需求不能将后端地址直接填入src 原因是需要获取图片请
  • 关于5G与网络

    目录 一 关于5G和网络的组成 1 什么是网络 2 OSI七层模型 3 数据封装过程 二 Tcp IP协议族的组成 1 各个层级常规的协议 2 各个层级对应的设备关系 一 关于5G和网络的组成 移动通信延续着每十年一代技术的发展规律 已历经
  • 使用 cancel token 取消接口请求

    cancel const CancelToken axios CancelToken let cancel axios defaults baseURL process env NODE ENV production process env
  • Burp Suite代理抓包和浏览器代理设置

    本文解决使用Burp Suite代理时出现的一些问题 比如出现代理服务器异常 建立安全连接失败等等 安全连接失败 a 在使用代理的时候经常出现下图所示的问题 这时可能是burp suite证书的问题 b 从burp suite导出证书 这个
  • Mysql有则更新无则新增的几种方案

    环境准备 mysql版本 5 7 29 测试表创建及初始化 建表 CREATE TABLE test user id bigint 20 unsigned NOT NULL AUTO INCREMENT COMMENT 主键 uid big
  • 删除未命名(系统命名)主键约束

    由于表结构的变动需要删除 现有的主键约束 增加新的主键约束 但主键约束没有指定约束名生成 无法直接删除该主键约束 需要先查询出主键约束名 然后才能够进行删除 原本是想通过该sql 语句在查询的时候直接进行删除 但是sql一直提示报错 原因不
  • 计算机打印机无法扫描,打印机无法扫描 打印机无法扫描怎么办 4种原因及解决方法...

    1 打印机的报警还没有解除 扫描时打印机显示电脑有故障或忙 然后无法正常扫描 这种情况下 拔下打印机插头 10秒后插上 打印机就可以正常扫描了 如果你不碰这个报警器 打印机将保持死锁状态 2 打印机和计算机之间的线路连接不好 这个原因很容易
  • FPGA学习笔记 1 -- Quartus软件的使用

    软件的使用 一 FPGA开发流程 二 Quartus II 13 1软件 1 新建工程 2 添加设计文件 3 分析与综合 4 分配引脚 5 编译工程 6 下载 一 FPGA开发流程 打开软件 新建工程 设计输入 verilog代码 配置工程
  • MySQL触发器创建

    1 语法格式 create trigger 触发器名称 before 或 after 触发事件 on 表名 for each row begin 触发器程序体 end 名词含义 lt 触发器名称 gt 最多64个字符 它和MySQL中其他对
  • 详解WIFI能用但是电脑不能上网怎么解决

    想要让电脑连接wifi上网 但是发现电脑连不上wifi 用手机检查wifi后发现是能用的 那么WIFI能用但是电脑不能上网怎么办呢 这种多半是ip地址分配的问题 下面小编就教下大家WIFI能用但是电脑不能上网的解决方法 方法一 1 在开始菜
  • Ubuntu安装conda

    1 下载Anaconda安装包 清华镜像 在ubuntu中ctr alt t打开终端 输入 wget https mirrors tuna tsinghua edu cn anaconda archive Anaconda3 2021 11
  • kvm磁盘管理

    kvm磁盘管理 KVM虚拟磁盘类型 raw qcow2 qemu img常用参数 主要参数 安装qemu img 查看磁盘信息 info 创建磁盘文件 create 磁盘容量调整 resize 热扩容 磁盘增加容量 磁盘缩小容量 生产环境下
  • python下载pandas库_Python中的pandas库

    导入包 import pandas as pd import numpy as np 提供高性能医用的数据类型和分析工具 pandas基于numpy实现 常与numpy和matplotlib一同使用 pandas的核心数据结构 series
  • spring cloud系列学习(二、SpringCloud之服务注册之Ribbon负载均衡)

    上个章节我们已经启动了服务生产者实例 这一章我们会启动四个不同端口的实例 然后如何通过负载平衡访问呢 这时就需要Ribbon 为了使用Ribbon 我们需要使用 LoadBalanced元注解 那么这个注解放在哪里呢 一般有两个Discov