springcloud简单了解及上手

springcloud微服务框架简单上手

文章目录

  • springcloud微服务框架简单上手
    • 一、SpringCloud简单介绍
      • 1.1 单体架构
      • 1.2 分布式架构
      • 1.3 微服务
    • 二、SpringCloud与SpringBoot的版本对应关系
      • 2022.x 分支
      • 2021.x 分支
      • 2.2.x 分支
    • 三、Nacos注册中心
      • 3.1 认识和安装Nacos
      • 3.2 配置Nacos
      • 3.3 nacos部署springboot项目
    • 四、http客户端Feign
      • 4.1 Feign的介绍
      • 4.2 自定义实现Feign
      • 4.3 Feign实践
    • 五、统一网关Gateway
      • 5.1 为什么要使用网关
      • 5.2 搭建网关服务
      • 5.3 测试网关GateWay

前言:作者是通过自己的项目所运用作为讲解,分享只是作者用到的方面

一、SpringCloud简单介绍

  • SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
  • SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

在这里插入图片描述

1.1 单体架构

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

**优点 **:
架构简单
部署成本低

缺点
耦合度高

如下就是简单的单体架构图

在这里插入图片描述

1.2 分布式架构

分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点
降低服务耦合
有利于服务升级拓展

如下就是简单的分布式架构图

在这里插入图片描述

1.3 微服务

微服务:是一种经过良好架构设计的分布式架构方案

微服务架构特征
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
面向服务:微服务对外暴露业务接口
自治:团队独立、技术独立、数据独立、部署独立
隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

如下就是简单的微服务架构图

在这里插入图片描述

二、SpringCloud与SpringBoot的版本对应关系

2022.x 分支

适配 Spring Boot 3.0,Spring Cloud 2022.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记): (注意,该分支 Spring Cloud Alibaba 版本命名方式进行了调整,未来将对应 Spring Cloud 版本,前三位为 Spring Cloud 版本,最后一位为扩展版本,比如适配 Spring Cloud 2022.0.0 版本对应的 Spring Cloud Alibaba 第一个版本为:2022.0.0.0,第个二版本为:2022.0.0.1,依此类推)

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2022.0.0.0*Spring Cloud 2022.0.03.0.2
2022.0.0.0-RC2Spring Cloud 2022.0.03.0.2
2022.0.0.0-RC1Spring Cloud 2022.0.03.0.0

2021.x 分支

适配 Spring Boot 2.4,Spring Cloud 2021.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2021.0.5.0*Spring Cloud 2021.0.52.6.13
2021.0.4.0Spring Cloud 2021.0.42.6.11
2021.0.1.0Spring Cloud 2021.0.12.6.3
2021.1Spring Cloud 2020.0.12.4.2

2.2.x 分支

适配 Spring Boot 为 2.4,Spring Cloud Hoxton 版本及以下的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2.2.10-RC1*Spring Cloud Hoxton.SR122.3.12.RELEASE
2.2.9.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE
2.2.8.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE
2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE
2.2.6.RELEASESpring Cloud Hoxton.SR92.3.2.RELEASE
2.2.1.RELEASESpring Cloud Hoxton.SR32.2.5.RELEASE
2.2.0.RELEASESpring Cloud Hoxton.RELEASE2.2.X.RELEASE
2.1.4.RELEASESpring Cloud Greenwich.SR62.1.13.RELEASE
2.1.2.RELEASESpring Cloud Greenwich2.1.X.RELEASE
2.0.4.RELEASE(停止维护,建议升级)Spring Cloud Finchley2.0.X.RELEASE
1.5.1.RELEASE(停止维护,建议升级)Spring Cloud Edgware1.5.X.RELEASE
spring cloud alibaba、spring cloud、spring boot版本对应:来自 gitHub 中的spring cloud alibaba官方说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明spring官网:https://spring.io/spring历史官方文档:https://docs.spring.io/spring-cloud/docs/spring离线依赖及文档下载地址:https://repo.spring.io/ui/native/libs-release-local/org/springframework/

三、Nacos注册中心

3.1 认识和安装Nacos

Nacos 是一个开源的分布式服务发现、配置管理和服务管理平台。它提供了服务注册与发现、配置管理、服务健康监测等功能,可以帮助开发者构建和管理云原生微服务架构。

具体来说,Nacos 提供了以下核心功能:

  1. 服务注册与发现(Service Discovery):允许服务实例注册到 Nacos,并通过 Nacos 客户端发现其他服务实例。这样,服务之间可以动态地发现和通信,实现了微服务架构中的服务发现功能。
  2. 配置管理(Configuration Management):Nacos 提供了统一的配置管理平台,允许开发者集中管理微服务的配置信息,支持配置的动态变更和实时推送,从而提高了配置管理的灵活性和可靠性。
  3. 服务健康监测(Health Check):Nacos 会定期检查服务实例的健康状态,确保只有健康的服务实例会被注册到服务发现中,并且及时地将不健康的实例移除,从而提高了整个系统的稳定性和可用性。

Nacos下载

链接:https://pan.baidu.com/s/1gwHPkvylWLtrjQYQCwmqqw?pwd=T401
提取码:T401

3.2 配置Nacos

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:

在这里插入图片描述

修改其中的内容为其他端口

在这里插入图片描述

启动nacos,进入bin目录, 然后 cmd 进入该目录执行命令

./startup.cmd -m standalone

出现下面内容即可

在这里插入图片描述

如果觉得在cmd输入命令麻烦可以修改脚本, 编辑start.cmd脚本,将集群模式修改为单机模式,在bin目录下右击startup.cmd文件,用记事本的方式打开,将MODE改成standalone即可,如下图所示

在这里插入图片描述

这样直接双击startup.cmd即可运行nacos

在这里插入图片描述

ctrl+左键点击命令窗口给的地址

在这里插入图片描述

nacos账号: nacos

nacos密码: nacos

在这里插入图片描述

到此nacos安装完成

3.3 nacos部署springboot项目

父工程

<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><version>2.2.6.RELEASE</version></dependency>

修改需要更改服务的中的application.yml文件

spring:  application:  # 应用配置项name: dataAccountService  # 应用名称为 dataAccountServicecloud:  nacos: server-addr: localhost:8848  # Nacos 服务端地址为 localhost:8848discovery:  # Nacos 服务发现配置项cluster-name: CQ  # 使用的 Nacos 集群名称为 CQ

启动springboot项目和nacos,出现自己配置的服务,及完成nacos的简单部署,在我的项目中,nacos主要做的是服务注册与发现,并没有其他内容,如果有需要可以参考其他博客

在这里插入图片描述

四、http客户端Feign

4.1 Feign的介绍

Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign
其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

Feign 的主要优势在于:

  1. 声明式 API 定义:Feign 允许开发者使用接口和注解来定义 RESTful 服务的请求和响应,而无需关心底层的 HTTP 请求和响应处理逻辑。通过编写简单的 Java 接口和添加 Feign 注解,就可以定义服务调用的各种细节,比如 URL、HTTP 方法、请求参数、请求头等。
  2. 模板化请求:Feign 提供了一套模板化的请求构建和发送机制,使得开发者可以轻松地构造 HTTP 请求并发送到目标服务端点。Feign 会根据接口定义和注解配置,自动构造出对应的 HTTP 请求,并将请求参数、请求头等信息注入到请求中。
  3. 集成了负载均衡和服务发现:Feign 可以与 Spring Cloud 中的服务发现组件(如 Eureka、Consul 等)和负载均衡组件(如 Ribbon)集成,从而实现服务之间的负载均衡和自动服务发现。开发者可以直接通过服务名来调用其他微服务,而无需硬编码服务的地址和端口。
  4. 可扩展性:Feign 提供了丰富的扩展点,开发者可以通过自定义编码器、解码器、拦截器等来扩展 Feign 的功能,从而满足各种特定的业务需求。

在这里插入图片描述

Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送
feign. Contract支持的注解格式默认是SpringMVC的注解
feign. Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

4.2 自定义实现Feign

导入依赖

如果服务A需要调用服务B的方法,则将依赖写入服务A的pom文件中,既服务A是消费者

        <!--        feign消费者--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.6.RELEASE</version></dependency>

配置Feign日志有两种方式:
方式一:配置文件方式
全局生效:

feign:httpclient:enabled: trueclient:config:default:  # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置logger-level: NONE #日志级别

局部生效

feign:httpclient:enabled: trueclient:config:dataAssetService:  # 这里用dataAssetService就是局部配置,只对dataAssetService服务生效logger-level: NONE #日志级别

方式二:编程方式,先声明一个Bean:

public class FeignClientConfiguration {@Beanpublic Logger.Level feignLogLevel(){return Logger.Level.BASIC; }
}

而后如果是全局配置,则把它放到@EnableFeignClients这个注解中

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class) 

如果是局部配置,则把它放到@FeignClient这个注解中:

@FeignClient(value = "dataAssetService", configuration = FeignClientConfiguration.class) 

4.3 Feign实践

方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。

  • 服务紧耦合

  • 父接口参数列表中的映射不会被继承

    自定义Feign 客户端接口


//被消费的服务名称
@FeignClient(name = "dataManagementService")
public interface dataAssetClient {/*** 获取数据标准信息* @param dataStandardCode * @return* /dataStandard/getDataStandardInfo为被消费的接口路径*/@GetMapping("/dataStandard/getDataStandardInfo")R getDataStandard(@RequestParam("dataStandardCode") String dataStandardCode);
}

消费者的controller


/*** <p>* 数据资产表 前端控制器* </p>** @author 不入青山入我怀* @since 2024-03-21*/
@RestController
@RequestMapping("/dataAsset")
public class DataAssetController {@Autowiredprivate dataAssetClient dataassetClient;//数据标准目录/*** 远程调用其他接口* /dataAsset/getDataStandard 在该服务调用其他服务的接口路径* @return*/@GetMapping("getDataStandard")public R getDataStandard() {return dataassetClient.getDataStandard("");}}

被消费者controller(正常写就行)

    /*** 获取数据标准信息* @param dataStandardCode* @return*/@GetMapping("getDataStandardInfo")public R getDataStandardInfo(@RequestParam("dataStandardCode") String dataStandardCode){return dataStandardService.getDataStandardInfo(dataStandardCode);//实现具体逻辑}

作者的Feign的实现逻辑

在这里插入图片描述

你也可以将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用,如下图

在这里插入图片描述

五、统一网关Gateway

5.1 为什么要使用网关

  1. 路由与负载均衡:网关可以作为请求的入口,根据请求的路径或者其他条件将请求路由到不同的后端服务。这样可以实现请求的负载均衡,将流量合理地分发到不同的服务实例上,从而提高整个系统的性能和可扩展性。
  2. 安全性:网关可以作为安全屏障,用于保护后端服务免受恶意攻击或者非法访问。通过网关可以实现访问控制、身份认证、权限验证等安全功能,确保只有合法的请求可以访问后端服务。
  3. 监控与统计:网关可以对请求进行监控和统计,记录请求的响应时间、成功率、失败率等指标,并生成相应的监控报告和统计数据。这样可以帮助开发者实时了解系统的运行状况,及时发现和解决问题。
  4. 日志与审计:网关可以记录请求的日志,包括请求的来源、目的地、参数、响应状态等信息,用于后续的审计和分析。这对于排查问题、追踪请求流程、分析用户行为等都非常有帮助。
  5. 服务聚合与协议转换:网关可以将多个后端服务的接口聚合成一个统一的接口供客户端调用,从而简化客户端的调用逻辑。同时,网关还可以实现不同协议之间的转换,比如将 HTTP 请求转换为 WebSocket 请求,或者将 RESTful 接口转换为 GraphQL 接口等。

5.2 搭建网关服务

创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖:

   <!--        网关gateway--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>2.2.6.RELEASE</version></dependency><!--        nacos服务注册发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.6.RELEASE</version></dependency>

编写路由配置及nacos地址

网关路由可以配置的内容包括:

  • 路由id:路由唯一标示
  • uri:路由目的地,支持lb和http两种
  • predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地
  • filters:路由过滤器,处理请求或响应
spring:  application:  name: gateway  # 应用名称为 gatewaycloud: nacos: discovery: server-addr: localhost:8848  # Nacos 服务端地址为 localhost:8848gateway: routes:  # 网关路由配置项,定义了多个路由规则- id: server-provice  # 第一个路由规则的标识符uri: lb://serve-provide  # 路由到服务名为 serve-provide 的服务predicates:  # 定义了路由匹配的条件- Path=/api/serve/**  # 匹配路径以 /api/serve/ 开头的请求filters:  # 定义了对请求和响应的处理规则- RewritePath=/api/(?<segment>/?.*),/$\{segment}  # 重写请求路径,将 /api/ 后面的路径段作为参数传递给后端服务- id: data-asset-service  # 第二个路由规则的标识符uri: lb://dataAssetService  # 路由到服务名为 dataAssetService 的服务predicates:  # 定义了路由匹配的条件- Path=/api/dataAsset/** ,/api/dataAssetField/** ,/api/dataAssetRelationCategory/**  # 匹配多个路径的请求filters:  # 定义了对请求和响应的处理规则- RewritePath=/api/(?<segment>/?.*),/$\{segment}  # 重写请求路径,将 /api/ 后面的路径段作为参数传递给后端服务server:port: 8989 

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

在这里插入图片描述

5.3 测试网关GateWay

利用Postman来测试,通过访问网关的端口8989,成功把接口转发到对应的服务中去

在这里插入图片描述

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

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

相关文章

银行核心背后的落地工程体系丨混沌测试的场景设计与实战演练

本文作者&#xff1a; 张显华、窦智浩、卢进文 与集中式架构相比&#xff0c;分布式架构的系统复杂性呈指数级增长&#xff0c;混沌工程在信创转型、分布式架构转型、小机下移等过程中有效保障了生产的稳定性。本文分享了 TiDB 分布式数据库在银行核心业务系统落地中进行混沌测…

基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..............................................................I0 imresize…

Uncaught InternalError: too much recursion

今天在敲代码的时候偶然间发现项目因为一次操作导致浏览器变得非常卡&#xff0c;而且控制台还报错了 Uncaught InternalError: too much recursior 页面截图如下 &#xff1a; 突如起来的报错和页面异常卡顿给我整不会了ovo&#xff0c;点开报错的地方&#xff0c;直接跳转到对…

数据丢失了!如何恢复手机数据?

“下雨天手机丢失了&#xff0c;找回来的时候以前的数据都丢失了&#xff0c;也不知道发生了什么&#xff01;全都是重要的数据和回忆&#xff0c;丢失后给我带来了不少麻烦&#xff0c;有没有办法能够帮我找回手机里的数据啊&#xff1f;” 随着智能手机的普及&#xff0c;我…

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于随机森林(Random Forest, RF)的风电功率预测是一种常用且有效的方法。以下是基于RF的风电功率预测的一般步骤: 数据准备:收集与风电场发电功率相关的数据,包括风速、风向、温度、湿度等气象数据以及风电场的历史功率数…

i春秋-Test

题目 解题 参考WP https://blog.csdn.net/qq_40654505/article/details/107142533/目录扫描 复现wp payload为&#xff1a; search.php?searchtype5&tid&areaeval($_POST[cmd])使用蚁剑连接 http://eci-2ze4iyhwj7xvb68bsb2t.cloudeci1.ichunqiu.com:80/search.ph…

10,hadoop优化与LZO压缩

hadoop多目录与LZO压缩 1.HDFS存储多目录 存储多目录&#xff1a; namenode&#xff0c; datanode namenode: 可以在当前节点中创建几个 namenode的多目录&#xff0c; 就是 虽说可以是多个目录&#xff0c;但是这个namenode多目录中&#xff0c;内容都是一样&#xff0c; 就…

Elasticsearch分词及其自定义

文章目录 分词发生的阶段写入数据阶段执行检索阶段 分词器的组成字符过滤文本切分为分词分词后再过滤 分词器的分类默认分词器其他典型分词器 特定业务场景的自定义分词案例实战问题拆解实现方案 分词发生的阶段 写入数据阶段 分词发生在数据写入阶段&#xff0c;也就是数据索…

PHP 自提时间

前端: 后台设置: 代码: public function getBusinessHour(){// 需求单门店$data (new StoreModel())->limit(1)->select()->toArray();$days explode(,, $data[0][shop_hours]);$businessHours $days[1];// 使用 explode 分割字符串&#xff0c;获取开始和结束时…

Leetcode 第 129 场双周赛题解

Leetcode 第 129 场双周赛题解 Leetcode 第 129 场双周赛题解题目1&#xff1a;3127. 构造相同颜色的正方形思路代码复杂度分析 题目2&#xff1a;3128. 直角三角形思路代码复杂度分析 题目3&#xff1a;3129. 找出所有稳定的二进制数组 I思路代码复杂度分析 题目4&#xff1a;…

LLM应用-prompt提示:让大模型总结生成思维导图

第一步&#xff1a;大模型生成markdown思维导图格式 例如&#xff1a;kimi 总结pdf文档案例&#xff1a; 生成的markdown格式&#xff1a; # 知识图谱的构建及应用 ## 一、知识图谱的构建 ### 1. 数据采集 - 来源&#xff1a;结构化数据库、半结构化网页、非结构化文本 - 预处…

2024年小学生古诗文大会备考:吃透历年真题和知识点(持续)

根据往年的安排&#xff0c;2024年小学生古诗文大会预计这个月就将启动。该如何备考2024年小学生古诗文大会呢&#xff1f;根据往期的经验&#xff0c;只要吃透这些真题和背后的知识点&#xff0c;通过上海小学生古诗文大会的初选&#xff08;初赛&#xff09;一点问题都没有。…