【Spring Cloud】Nacos及Ribbon组件的使用

news2024/10/2 20:34:03

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的专栏《Spring Cloud》。🎯🎯

👉点击这里,就可以查看我的主页啦!👇👇

Java方文山的个人主页

🎁如果感觉还不错的话请给我点赞吧!🎁🎁

💖期待你的加入,一起学习,一起进步!💖💖

请添加图片描述

🌟前言

这篇文章主要讲解SpringCloud中的两个组件Eureka和Ribbon,教会大家在项目的过程中如何使用这两个组件以及更加深入的了解这两个组件的作用是什么?话不多说上代码!!

✨环境配置

首先我们需要一个SpringCloud作为我们的父项目,将子项目写在父项目中并继承即可,父项目的作用就是提供公共的依赖。

🍃创建Maven项目

直接新建一个Maven项目即可

🍃项目定义版本

 现在版本更新迭代的非常快,所以使用什么版本也需要有要求,否则就会不兼容,以下是相应Boot与Cloud的版本对照,提供大家参考

选择好自己需要的版本就可以为其定义了 

<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 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>Cloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!-- 定义版本-->
    <properties>
        <spring-boot.version>2.4.1</spring-boot.version>
        <spring-cloud.version>2020.0.0</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>

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

</project>
packing( 打包类型 , 默认为 jar)
pom : 父级项目 (pom 项目里没有 java 代码 , 也不执行任何代码 , 只是为了聚合工程或传递依赖用的 )
jar : 内部调用或者是作服务使用
war : 需要部署的项目

🍃创建子项目

这里有两个身份项目,一个是生产者另一个是消费者,分别扮演不同的模块或不同服务

🎊生产者项目创建

 现在我们的子项目创建出来了,但是它和父项目还没有任何关系,所以我们还需要让它继承

  <parent>
        <groupId>org.example</groupId>
        <artifactId>Cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

 不但子项目要继承父项目,父项目那边也需要定义子项目才能双向奔赴

   <!--定义子项目-->
    <modules>
        <module>produce</module>
    </modules>

🎊消费者项目创建

该项目直接复制生产者项目即可,随后将“produce”改为“consume”

✨Nacos案例实操

环境我们已经搭建好了,现在我们来讲解一下我们这两个组件的使用,我们先为生产者创建一个controller编写一个方法生成鸡腿的方法

@RestController
public class ProduceController {
    @RequestMapping("/run")
    public String run() {
        return "🍗";
    }
}

然后我们消费者也创建一个controller编写一个获取鸡腿的方法

@RestController
public class ConsumeController {

    @RequestMapping("/run")
    public String run() {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject("http://localhost:8082/run", String.class);
    }
}

运行测试一下 

成功获取到了我们的鸡腿,但是这样的方法真的合适吗?如果在开发过程中先不谈我们如何知道对方服务的接口是什么,就算知道了在方法很多的情况下一个个写也是非常的麻烦,这就不得不提到我们的Nacos,它可以用于实现动态服务发现、服务配置和服务管理。

🍃Nacos下载

我们使用Nacos首先需要下载Releases · alibaba/nacos · GitHub

我这里下载的windows版本的,不需要安装,下载好直接解压,然后到bin目录下,执行startup.cmd -m standalone启动即可。 

命令运行成功后直接访问http://localhost:8848/nacos默认账号密码都是nacos 

 

🍃文件配置 

①要想我们的项目注册到nacos就需要做相应的配置,在application.yml编写一下内容,其中name就是我们项目注册到nacos中的名字

spring:
    cloud:
        nacos:
            discovery:
                server-addr: localhost:8848
    application:
        name: consume

 ②文件配置了但spring怎么读取呢?我们现在还需要导入一个nacos依赖(可写在父项目)

         <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

③打开我们的nacos服务,需要在每个启动器上加上下面这个注解

@EnableDiscoveryClient

再次启动我们的项目,就会发现项目注册到Nacos中去了

这时候我们也可以使用服务名进行服务发现与调用了

 

 ✨Ribbon案例实操

虽然我们的服务可以实现动态发现了,但还有一个问题,万一别人的服务器部署了很多呢?那我们的请求怎么知道该向那个服务发送请求呢?这时Spring Cloud Ribbon就派上用场了。Ribbon就是专门解决这个问题的。它的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上。

🍃依赖引入

       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

🍃负载均衡

@LoadBalanced注解表示该RestTemplate对象将使用负载均衡器来分配请求,以便在多个服务实例之间分配请求。在使用Spring Cloud的服务发现和注册功能时,这个注解通常与Ribbon负载均衡器一起使用,以确保请求被均匀地分配到不同的服务实例中。

默认情况下,RestTemplate对象不会使用负载均衡器,而是直接向指定的URL发送请求。通过添加@LoadBalanced注解,Spring将为RestTemplate对象创建一个代理,该代理会自动将请求发送到负载均衡器,并根据特定的负载均衡策略选择一个可用的服务实例来处理请求。

@Configuration
public class RestConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
 return new RestTemplate();
 }
}

因为RestTemplate已经加到Spring中去了,那我们也不需要new出来了,直接引用即可

@RestController
public class ConsumeController {

    @Autowired
    RestTemplate restTemplate;

    @RequestMapping("/run")
    public String run() {
        return restTemplate.getForObject("http://produce:8082/run", String.class);
    }
}

下面我们做一个测试首先将两个服务分别打成jar包

使用我们的终端运行jar(生产服务运行多个模拟负载均衡)

 现在我们看一下nacos的服务,可以看到生产服务有三个

Ribbon的负载均衡默认使用的最经典的Round Robin轮询算法。这是啥?简单来说,就是如果订单服务对库存服务发起10次请求,那就先让你请求第1台机器、然后是第2台机器、第3台机器、第4台机器、第5台机器,接着再来—个循环,第1台机器、第2台机器。。。以此类推。如果其中一个挂了就不会给它发送请求了

请添加图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!

💖如果觉得有用的话还请点个赞吧 💖

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

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

相关文章

SQL Server 权限管理

CSDN 成就一亿技术人&#xff01; 2024年 第一篇 难度指数&#xff1a;* * CSDN 成就一亿技术人&#xff01; 目录 1. 权限管理 什么是权限管理&#xff1f; SQL server的安全机制 服务器级角色 数据库级角色 对象级角色 2. 创建用户 赋予权限 最重要的一步骤 1. 权限…

【信号处理:小波包转换(WPT)/小波包分解(WPD) 】

【信号处理&#xff1a;小波包转换&#xff08;WPT&#xff09;/小波包分解&#xff08;WPD&#xff09; 】 小波包变换简介WPT/WPD的基础知识WPT/WPD的主要特点The Wavelet Packet Transform 小波包变换前向小波数据包变换最佳基础和成本函数数学中波纹的最佳基础其他成本函数…

计算机中的数据运算

放上计算机中的数据的表示方法 计算机中的数据表示方法-CSDN博客 补码的运算&#xff1a; 连同符号位一起相加&#xff0c;符号位产生的进位自然丢掉&#xff0c;这里要特别注意机器数的位数&#xff0c;计算数的位数决定了可以存放的数据的大小&#xff0c;加减产生的数据的…

软件测试|Docker Kill/Pause/Unpause命令详细使用指南

简介 Docker是一种流行的容器化平台&#xff0c;提供了各种命令和功能来管理和操作容器。本文将详细介绍Docker中的三个重要命令&#xff1a;kill、pause和unpause。我们将深入了解它们的作用、用法和示例&#xff0c;帮助您更好地理解和使用这些命令。 什么是Docker Kill/Pa…

解决 Postman 报错问题:一份综合指南

Postman 是一个流行的 API 测试工具&#xff0c;它可以帮助开发者和测试人员快速地创建和发送各种 HTTP 请求&#xff0c;并查看响应结果。但是&#xff0c;在使用 Postman 的过程中&#xff0c;有时候会遇到一些报错或异常情况&#xff0c;影响了正常的测试流程。本文将介绍一…

MongoDB索引详解

概述 索引是一种用来快速查询数据的数据结构。BTree 就是一种常用的数据库索引数据结构&#xff0c;MongoDB 采用 BTree 做索引&#xff0c;索引创建 colletions 上。MongoDB 不使用索引的查询&#xff0c;先扫描所有的文档&#xff0c;再匹配符合条件的文档。使用索引的查询&…

【linux笔记1】

目录 【linux笔记1】文件内容的理解用户管理用户管理命令添加用户切换用户修改用户信息删除用户 用户组 【linux笔记1】 文件内容的理解 etc文件夹&#xff1a;etc是拉丁语"et cetera"的缩写&#xff0c;意思是“和其他的”或“等等”。在linux系统中&#xff0c;“…

【C++】类和对象详解(类的使用,this指针)

文章目录 前言面向过程和面向对象的初步认识类的引入类的定义类的访问限定符和封装性访问限定符封装性 类的作用域类的实例化类对象模型如何计算类对象的大小类对象的存储方式猜测结构体内存对齐规则 this指针this指针的引出this指针的特性 总结 前言 提示&#xff1a;这里可以…

【DevOps-07-3】Jenkins集成Sonarqube

一、简要说明 Jenkins安装Sonarqube插件Jenkins安装和配置Sonar-Scanner信息Jenkins打包项目中,增加Sonar-Scanner代码质量扫描二、Jenkins安装Sonarqube插件 1、登录Jenkins管理后台,搜索安装Sonar-Scanner插件 Jenkins管理后台示例:http://192.168.95.131:8080/jenkins/

MySQL之视图内连接、外连接、子查询案例

目录 一.视图 1.1 含义 1.2 操作 二.案例 三.思维导图 一.视图 1.1 含义 虚拟表&#xff0c;查询方面和普通表一样使用。 1.2 操作 1.创建视图&#xff1a; create or replace view 视图名 as 查询语句&#xff1b; 2.视图的修改&#xff1a; 方式1 create or replace view …

HttpRunner的测试用例分层机制

测试用例分层介绍&#xff1a; 在接口自动化测试维护过程中&#xff0c;由于测试用例的增加和需求变更导致测试用例的调整&#xff0c;使自动化测试用例的维护非常麻烦&#xff0c;直接关系到自动化测试能否持续有效地在项目中开展。 概括来说&#xff0c;测试用例分层机制的核…

性能优化-OpenMP基础教程(三)

本文主要介绍OpenMP并行编程的环境变量和实战、主要对比理解嵌套并行的效果。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &…

MiniTab的宏基础知识

什么是宏&#xff1f; 宏是包含一系列 Minitab 会话命令的文本文件。可以使用宏自动执行重复性任务&#xff08;例如&#xff0c;生成月度报表&#xff09;或扩展 Minitab 的功能&#xff08;例如&#xff0c;计算特殊检验统计量&#xff09;。 Minitab 提供以下类型的宏&…

JetBrains Rider使用总结

简介&#xff1a; JetBrains Rider 诞生于2016年&#xff0c;一款适配于游戏开发人员&#xff0c;是JetBrains旗下一款非常年轻的跨平台 .NET IDE。目前支持包括.NET 桌面应用、服务和库、Unity 和 Unreal Engine 游戏、Xamarin 、ASP.NET 和 ASP.NET Core web 等多种应用程序…

IOS:Safari无法播放MP4(H.264编码)

一、问题描述 MP4使用H.264编码通常具有良好的兼容性&#xff0c;因为H.264是一种广泛支持的视频编码标准。它可以在许多设备和平台上播放&#xff0c;包括电脑、移动设备和流媒体设备。 使用caniuse查询H.264兼容性&#xff0c;看似确实具有良好的兼容性&#xff1a; 然而…

C#,入门教程(09)——运算符的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(08)——基本数据类型及使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123906998 一、算术运算符号 算术运算符号包括&#xff1a;四则运算 加 , 减-, 乘*, 除/与取模%。 // 加法&#xff0c;运算 int va 1 …

海外分支访问国内服务器系统慢怎么办?

在全球业务不断扩张的今天&#xff0c;企业面临着海外分支访问国内总部服务器系统慢的问题。为了解决这一挑战&#xff0c;我们引入了lxway全球系统专网产品&#xff0c;为企业提供高效、安全的全球网络连接方案。通过解析技术瓶颈和专网的优势&#xff0c;本文将揭示如何借助先…

Linux第10步_通过终端挂载和卸载U盘

学习完“通过终端查看U盘文件”后&#xff0c;我们需要接着学习“通过终端挂载和卸载U盘”。主要是挂载U盘&#xff0c;它的用处很大&#xff0c;目的是通过命令来访问U盘。由于U盘的名字有很多种&#xff0c;为了便于访问&#xff0c;我们把将U盘的第一分区挂载到udisk目录下&…

Library Genesis (创世纪图书馆)最新镜像地址,可直接访问!不逊于 Z-Library 的优质电子书库

Library Genesis是一个提供免费访问数百万篇学术论文、书籍和其他研究资料的网站。它由一群图书馆员于1999年创立&#xff0c;并已成为全球学生、研究人员和学者最受欢迎的在线资源之一。 该网站提供各种材料&#xff0c;包括同行评审的期刊文章、会议论文、学位论文、论文、教…

【JAVA】volatile 关键字的作用

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 volatile 的作用&#xff1a; 结语 我的其他博客 前言 在多线程编程中&#xff0c;保障数据的一致性和线程之间的可见性是…