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

 

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

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

相关文章

Agents改变游戏规则,亚马逊云科技生成式AI让基础模型加速工作流

最近&#xff0c;Stability AI正式发布了下一代文生图模型——Stable Diffusion XL 1.0这次的1.0版本是Stability AI的旗舰版生图模型&#xff0c;也是最先进的开源生图模型。 在目前的开放式图像模型中&#xff0c;SDXL 1.0是参数数量最多的。官方表示&#xff0c;这次采用的…

记录电赛色块追踪部分

代码其实也很简单&#xff0c;我只不过加入了按键控制暂停、蜂鸣器、led和如何控制追踪的效果&#xff08;调PID&#xff09;。B站的那些大神早早地完成了要求&#xff0c;我犯了一个不好地错误&#xff0c;企图三连让他们分享思路&#xff0c;这是不对的&#xff0c;电赛本身的…

无人机巢的作用及应用领域解析

无人机巢作为无人机领域的创新设备&#xff0c;不仅可以实现无人机的自主充电和电池交换&#xff0c;还为无人机提供安全便捷的存放空间。为了帮助大家更好地了解无人机巢&#xff0c;本文将着重解析无人机巢的作用和应用领域。 一、无人机巢的作用 无人机巢作为无人机技术的重…

读发布!设计与部署稳定的分布式系统(第2版)笔记28_控制层上

1. 控制层囊括所有在后台运行的成功处理生产负载的软件和服务 1.1. 处理用户生产数据的那些软件&#xff0c;就是生产软件 1.2. 主要工作是管理其他软件的软件&#xff0c;就是控制层 1.3. 工具和问题之间存在着重叠和空白&#xff0c;并不是每个工具组合都能协同工作&#…

yxBUG记录

1、 原因&#xff1a;前端参数method方法名写错。 2、Field ‘REC_ID‘ doesn‘t have a default value 问题是id的生成问题。 项目的表不是自增。项目有封装好的方法。调用方法即可。 params.put("rec_id",getSequence("表名")) 3、sql语句有问题 检…

MySql之慢Sql定位分析

MySql之慢Sql定位分析 定位低效率执行SQL 可以通过以下两种方式定位执行效率较低的SQL语句。 慢查询日志:通过慢查询日志定位那些执行效率较低的SQL语句,用- log-slow-queries[ file name]选项启动时, mysqld是一个包含所有执行时间超过 long_query_time秒的sql请句的日志文…

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL&#xff08;数据查询语句&#xff09;3 DML&#xff08;数据操纵语句&#xff09;4 DDL&#xff08;数据定义语句&#xff09;5 DCL&#xff08;数据控制语句&#xff09;6 TCL&#xff08;事务控制语句&#xff09; 1 SQL语句简介…

备战秋招 | 笔试强训24

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、请指出选择排序&#xff0c;冒泡排序&#xff0c;快速排序的时间复杂度分别是&#xff08;&#xff09; A. O(n^2)、O(n^2)、O(n*log2n) B. O(n*log2n)、、O(n^2)、O(n*log2n&#xff09; C. O(n…

scanf函数读取数据 清空缓冲区

scanf函数读取数据&清空缓冲区 scanf 从输入缓冲区读取数据数据的接收数据存入缓冲区scanf 中%d读取数据scanf中%c读取数据 清空输入缓冲区例子用getchar()吸收回车练习 scanf 从输入缓冲区读取数据 首先&#xff0c;要清楚的是&#xff0c;scanf在读取数据的时候&#xff…

uniapp:图片验证码检验问题处理

图形验证码功能实现 uniapp&#xff1a;解决图形验证码问题及利用arraybuffer二进制转base64格式图片&#xff08;后端传的图片数据形式&#xff1a;x00\x10JFIF\x00\x01\x02\x00…&#xff09;_❆VE❆的博客-CSDN博客 UI稿&#xff1a; 需求&#xff1a;向后端请求验证码图片&…

HttpServletRequest和HttpServletResponse的获取与使用

相关笔记&#xff1a;【JavaWeb之Servlet】 文章目录 1、Servlet复习2、HttpServletRequest的使用3、HttpServletResponse的使用4、获取HttpServletRequest和HttpServletResponse 1、Servlet复习 Servlet是JavaWeb的三大组件之一&#xff1a; ServletFilter 过滤器Listener 监…

深度学习(35)—— StarGAN(2)

深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;2&#xff09; 完整项目在这里&#xff1a;欢迎造访 文章目录 深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;2&#xff09;1. build model&#xff08;1&#xff09;generator&#xff08;2&#…