SpringCloud深度学习(在更)

微服务简介

微服务是什么?

微服务是一种架构风格,将一个大型应用程序拆分为一组小型、自治的服务。每个服务都运行在自己独立的进程中,使用轻量级的通信机制(通常是HTTP或消息队列)进行相互之间的通信。这种方式使得每个服务可以独立开发、部署和扩展,同时也降低了整个应用程序的复杂性。微服务架构可以提高系统的可伸缩性、灵活性和可维护性,使得团队可以更快地开发和交付新的功能。

微服务项目结构图

单体的Java项目和分布式的Java项目的区别

  单体项目

  • 优点:发布简单,开发时无需考虑接口暴露问题。
  • 缺点:项目耦合度会随着代码量的增大而提高,可读性底。
  • 作用域:面向使用人群小的项目,开发成本底。(个人系统,个人博客,等等)

微服务项目

  • 优点:大大降低耦合度,业务模块分布清楚,可读性高。
  • 缺点:开发成本远远大于单体项目,需要考虑接口暴露问题。
  • 作用域:面向使用人群大的项目。(电商项目,等等) 

 微服务结构

 微服务对比

学习环境

 jdk1.8,。

springboot版本为:2.3.9.RELEASE。

springcloud版本为:Hoxton.SR10。

eureka 

eureka的作用:作为服务中心。

 eureka的使用

1.创建eureka的注册中心

导入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

在application.yml中配置对应的注册信息

#在注册中心中的名字
spring:application:name: eurekaService
对应的服务端口
server:port: 10086因为eureka作为服务注册中心,所以也需要将自己注册到服务中心中
eureka:client:service-url:defaultZone: http://localhost:10086/eureka

在启动类上添加注解驱动 @EnableEurekaServer 

对应的效果图

 2.将服务端和消费端都注册到eureka中。

此时服务端和客户端需要添加的依赖为下

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

 在application.yml编写注册信息

#要注册到的注册中心位置
eureka:client:service-url:defaultZone: http://localhost:10086/eurekaspring:application:name: ”对应名字“

在restTemplate中将原本对应的地址位置修改为在eureka中的要调用的服务名字

注册中心效果图为下:

在未来我们的某个模块不一定只有一个,它可能是多个相同的模块,防止因为宕机的缘故导致服务无法使用。

这里我们就复制一个相同的服务

 在对用的restTemplate的配置类添加 @LoadBalanced

 进行测试,在调用两次接口后发现两个服务都被调用了一次,说明实现了负载均衡。

  Ribbon

Ribbon流程

 Ribbon负载均衡流程源码

在LoadBalancerInterceptor类中会调用intercept方法,其会获取对应的host名字,通过这个host去注册中心中查找对应的服务地址。

效果图为下: 

 获得到的serverName=user-service。

通过后序loadBalancer的execute方法,其会调用实现类下的execute方法,也就是RibbonLoadBalancerClient下的execute方法

 通过getServer方法去eureka中拉去对应的名字的服务,可以得到user-service的实例,这里就是两个user-service实例。

 在getServer方法中最终会调用到rule.choose方法

 在该方法的作用就是选择对应的负载均衡的策略

总共有四大种策略,默认使用轮番查询策略,也就是 RoundRobinRule。

最终只要通过添加@LoadBalanced就可以实现负载均衡。

负载均衡策略 

 设置策略的方法

1. 通过@Bean配置对应的策略,其作用域为全局。

    @Bean//设置为随机策略public IRule getIRule() {return new RandomRule();}

2.通过在application.yml中进行配置,此方法的优点就是作用域小,可以只作用在某个服务模块上。

#对应要设置策略的服务名
user-service:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

 饥饿加载

在默认情况下,只有当消费端访问对用的服务端时,服务端才会进行加载,所以在第一次访问服务端的耗时会很长。

为了提高访问效率,我们可以在项目启动时提前加载好对应的服务端,这里就可以使用饥饿加载。

配置方法为下:

ribbon:eager-load:enabled: true#clients是个列表,所以可以设置多个clients: - user-service

这样在消费端第一次访问对应的服务端时就会大大减少消耗的时间。

nacos

nacos安装 

 下载并解压对应的nacos文件后,通过cmd进入nacos的bin目录,执行以下指令进行启动。

startup.cmd -m standalone

此时我们就可以访问localhost:8848/nacos,在该界面中的用户名和密码都是:nacos。

将对应的服务端和消费端的注册中心都改为nacos。

1.导入依赖

在父目录中导入的依赖为下:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

 在服务端和消费端导入的依赖为下:

<!-- nacos客户端依赖包 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在服务端中的application.yml中配置为下:

spring:cloud:nacos:server-addr: localhost:8848

启动微服务,效果图为下:

 nacos服务分级存储模型

实现方法就是:将每个服务分布到不同的集群,这样就可以保证在某个集群失效时不会影响服务的使用。

例子:将所有的user-service设置到集群HZ,将order-service设置到集群BJ。
在application.yml的设置为下:

spring:cloud:nacos:discovery:#设置对应的集群名称cluster-name: BJ

实现效果为下:

 服务实例的权重设置

权重范围为:0~1,数字越大权重就越大。

在nacos中的是设置方式为下:

权重的使用的特殊情况。

当我们需要对某个模块进行升级时,我们不再需要重新发布项目,而是将当前服务的权重设置为0,这样用户访问是就不会调用当前的服务模块,用户对访问到项目功能的其他模块。

nacos设置负载均衡

 在application.yml中配置以下信息:

#对应要设置策略的服务名
user-service:ribbon:#设置的哦负载均衡的策略NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

该策略为:存在多个拥有同样功能的集时,我们会先去访问,距离我们更近的集群,当该集群宕机时,才会访问其他相同功能的模块。

nacos环境隔离

在nacos中新建一个环境的方式。

 id不设置的话,就会通过UUID自动生成。

在代码application.tml中设置服务的环境空间。

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: BJnamespace: 419f5dac-5806-4e04-9017-6f7bf726ba41

 注意:不同环境间的服务模块是无法相互调用的,所以如果出现500异常可能就是跨环境的错误。

nacos和eureka的区别

nacos设置非临时实例的设置为下:

spring:cloud:nacos:discovery:#设置为非临时实例ephemeral:true

nacos配置管理

在nacos中配置对应的application.yml。

配置文件的名字的格式为:[服务名]-[对应的环境名].[文件格式]。(userservice-dev.yaml)

 编写效果为下:

为了配合使用线上的配置文件,所以我们需要在springboot说明服务模块对应的线上的配置文件名。

需要在对应的服务模块引入对应的依赖

<!--nacos配置管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

在对应的服务上创建bootstrap.yaml 文件,在该文件中配置对应的线上配置文件信息。

启动测试。

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何恢复已删除的 PDF 文件 - Windows 11、10

在传输数据或共享专业文档时&#xff0c;大多数人依赖PDF文件格式&#xff0c;但很少知道如何恢复意外删除或丢失的PDF文件。这篇文章旨在解释如何有效地恢复 PDF 文件。如果您身边有合适的数据恢复工具&#xff0c;PDF 恢复并不像看起来那么复杂。 便携式文档格式&#xff08…

栈和队列的实现

Lei宝啊&#xff1a;个人主页&#xff08;也许有你想看的&#xff09; 愿所有美好不期而遇 前言 &#xff1a; 栈和队列的实现与链表的实现很相似&#xff0c;新瓶装旧酒&#xff0c;没什么新东西。 可以参考这篇文章&#xff1a; -------------------------无头单向不循环…

D. Productive Meeting

Example input 8 2 2 3 3 1 2 3 4 1 2 3 4 3 0 0 2 2 6 2 3 0 0 2 5 8 2 0 1 1 5 0 1 0 0 6 output 2 1 2 1 2 3 1 3 2 3 2 3 5 1 3 2 4 2 4 3 4 3 4 0 2 1 2 1 2 0 4 1 2 1 5 1 4 1 2 1 5 2 解析&#xff1a; 贪心&#xff0c;每次选择两个剩余次数最多的人&#xff0c;并…

ad+硬件每日学习十个知识点(24)23.8.4(时序约束,SignalTap Ⅱ)

文章目录 1.建立时间和保持时间2.为什么要建立时序约束&#xff1f;3.SignalTap Ⅱ4.SignalTap Ⅱ使用方法5.HDL的仿真软件&#xff08;modelsim&#xff09;6.阻抗匹配 1.建立时间和保持时间 答&#xff1a; 2.为什么要建立时序约束&#xff1f; 答&#xff1a; 3.Sign…

火力全开!百度文心3.5三大维度、20项指标国内问鼎!

近日&#xff0c;清华大学新闻与传播学院沈阳团队发布《大语言模型综合性能评估报告》&#xff08;下文简称“报告”&#xff09;&#xff0c;报告显示百度文心一言在三大维度20项指标中综合评分国内第一&#xff0c;超越ChatGPT&#xff0c;其中中文语义理解排名第一&#xff…

深度学习——全维度动态卷积ODConv

ODConv(OMNI-DIMENSIONAL DYNAMIC CONVOLUTION)是一种关注了空域、输入通道、输出通道等维度上的动态性的卷积方法&#xff0c;因此被称为全维度动态卷积。 part1. 什么是动态卷积 动态卷积就是对卷积核进行线性加权 第一篇提出动态卷积的文章也是在SE之后&#xff0c;他提出…

14.2.2 【Linux】software, hardware RAID

磁盘阵列分为硬件与软件。所谓的硬件磁盘阵列是通过磁盘阵列卡来达成阵列的目的。磁盘阵列卡上面有一块专门的芯片在处理 RAID 的任务&#xff0c;因此在性能方面会比较好。在很多任务 &#xff08;例如 RAID 5 的同位检查码计算&#xff09; 磁盘阵列并不会重复消耗原本系统的…

Harbor企业镜像仓库部署

目录 一、Harbor 架构构成 二、部署harbor环境 1、安装docker-ce&#xff08;所有主机&#xff09; 2、阿里云镜像加速器 3、部署Docker Compose 服务 4、部署 Harbor 服务 5、启动并安装 Harbor 6、创建一个新项目 三、客户端上传镜像 1、在 Docker 客户端配置操作如下…

微服务——RestClient查询文档

快速入门 返回结果直接把json风格的结果封装为SearchReponse对象返回 public class HotelSearchTest {private RestHighLevelClient client;Testvoid testMatchAll() throws IOException {//1.准备requestSearchRequest request new SearchRequest("hotel");//2.准…

Transformer1.0-预热

一.Encoder encoder:译为编码器&#xff0c;负责将输入序列压缩成指定长度的向量&#xff0c;这个向量就可以堪称是这个序列的语义。然后可进行编码或特征提取等操作 在transformer中encoder由6个相同的层组成&#xff0c;每个层包含 Multi-Head Self-AttentionPosition-Wise …

【Vue】Parsing error: No Babel config file detected for ... vue

报错 Parsing error: No Babel config file detected for E:\Study\Vue网站\实现防篡改的水印\demo02\src\App.vue. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.             …

GD32F103VE侵入事件

GD32F103VE的TAMPER引脚(PC13)&#xff0c;当PC13输入低电平时&#xff0c;会产生一个侵入检测事件。它会将所有“数据备份寄存器”内容清除。 这个功能有什么用&#xff1f; 一是防止被人开壳&#xff0c;抄袭。二是自毁功能。 直奔主题&#xff0c;多一句就是浪费时间。测试…

Docker快速入门笔记

Docker快速入门 前言 当今软件开发领域的一股热潮正在迅速兴起&#xff0c;它融合了便捷性、灵活性和可移植性&#xff0c;让开发者们欣喜若狂。它就是 Docker&#xff01;无论你是一个初学者&#xff0c;还是一位经验丰富的开发者&#xff0c;都不能错过这个引领技术浪潮的工…

Elastic的下载

文章目录 ElasticSearch的下载扩展1&#xff08;ElasticSearch 与 JDK 版本 适配&#xff09;扩展2&#xff08;访问 http://192.168.1.200:9200 没有显示信息&#xff09;扩展3&#xff08;免密登录&#xff09; ElasticSearch的下载 官方下载网址&#xff1a;https://www.el…

maven install命令:将包安装在本地仓库,供本地的其它工程或者模块依赖

说明 有时候&#xff0c;自己本地的maven工程依赖于本地的其它工程&#xff0c;或者manven工程中的一个模块依赖于另外的模块&#xff0c;可以执行maven的install命令&#xff0c;将被依赖的包安装在maven本地仓库。 示例 一个工程包含几个模块&#xff0c;模块之间存在依赖…

码云 Gitee + Jenkins 配置教程

安装jdk 安装maven 安装Jenkins https://blog.csdn.net/minihuabei/article/details/132151292?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132151292%22%2C%22source%22%3A%22minihuabei%22%7D 插件安装 前往 Manage Jen…

解决Vs Code工具开发时 保存React文件时出现乱码情况

Vs Code工具开发时 保存React文件时出现乱码情况 插件库搜索:JS-CSS-HTML Formatter 把这个插件禁用或者卸载就解决保存时出现乱码的问题了; 如果没有解决,再看下面方案! 出现乱码问题通常是因为文件的编码格式不正确。您可以尝试以下解决方法&#xff1a; 确认文件编码格式&a…

Visual Studio 2019 实用功能设置(背景颜色,代码字体及行号设置)

前言 Visual Studio 2019 安装包的下载教程、安装教程 教程 博主博客链接&#xff1a;https://blog.csdn.net/m0_74014525 关注博主&#xff0c;后期持续更新系列文章 系列文章 第一篇&#xff1a;Visual Studio 2019 详细安装教程&#xff08;图文版&#xff09; 第二篇&…

在win10, win11 家庭版中安装远程桌面服务

win10&#xff0c; win11 家庭版中提供远程桌面服务 简介 在windows家庭版中&#xff0c;是不提供远程桌面服务的&#xff0c;你没有办法使用远程桌面连接到windows家庭版中。 当然&#xff0c; 你可用升级windows 版本到专业版&#xff0c;这样就可用享受到windows自带的远程…

基于ARM+FPGA (STM32+ Cyclone 4)的滚动轴承状态监测系统

状态监测系统能够在故障早期及时发现机械设备的异常状态&#xff0c;避免故障的 进一步恶化造成不必要的损失&#xff0c;滚动轴承是机械设备的易损部件&#xff0c;本文对以滚动 轴承为研究对象的状态监测系统展开研究。现有的监测技术多采用定时上传监 测数据&#xff0c;…